我正在尝试写入以将值附加到 csv。我可以搜索并找到缺少字段的位置,但想知道是否有办法插入 0 作为这些字段的默认值。
我有以下代码。
def fillBlanks():
HEADERS = ['ST','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT',
'PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT' ]
fileH = open(outputDir+"PCT_SHORT_V_SHORT.csv", 'rb')
reader = csv.DictReader(fileH, HEADERS)
for row in reader:
if any(row[key] in (None, "") for key in row):
print "bad"+ str(row)
fileH.close()
这给了我缺少的行和列,如下所示。
bad{'PCT_SHORT': None, 'Year': None, 'PCT_V_SHORT': None, 'ST': 'NV'}
bad{'PCT_SHORT': None, 'Year': None, 'PCT_V_SHORT': None, 'ST': 'CA'}
bad{'PCT_SHORT': None, 'Year': None, 'PCT_V_SHORT': None, 'ST': 'AZ'}
bad{'PCT_SHORT': None, 'Year': None, 'PCT_V_SHORT': None, 'ST': 'US'}
有没有一种方法可以使用默认值进行编码,这样就不会丢失任何字段?我想将字段设置为 999 或 0。我希望这一点很清楚,我是 python 新手。
编辑: 这是数据示例 ('好的', '2015', '14', '3', '2014', '28', '17', '2013', '19', '17', '2012', '36', ' 12') ('AZ', '2015', '14', '2', '2014', '36', '2') ('ID', '2015', '12', '0', '2014', '28', '4', '2013', '24', '2', '2012', '14', ' 1')
最佳答案
DictReader
有一个 restval
参数来设置缺失字段的默认值。
但是对于缺失字段...在读取值的末尾,即:该行的字段少于预期。
您的问题不清楚您丢失的字段是位于链的末尾还是链中的任何位置。或者如果缺失意味着将有两个连续的分隔符。
此外,DictReader
可能不是您最好的 friend :HEADERS
定义中的某些字段具有相同的名称,因此将写入相同的键。如果这不是您的意图,您应该为每个 header 分配一个唯一的名称。
编辑:按照评论
下面代码中的标题为每个 csv 字段提供唯一的 ID,缺失的字段将使用传递的值 missing
或 '0'
进行填充。
有了它,DictReader
可以将每个读取的 csv 字段分配给各个键或用 restval
填充。
DictWriter
撤消该操作,并将解析后的(可能已填充的)csv 数据写回 outpath
def fillBlanks(inpath, outpath, missing=None, writeheaders=False):
# Assign unique identifiers in HEADERS to each csv field
HEADERS = [
'ST',
'Year_1', 'PCT_SHORT_1', 'PCT_V_SHORT_1',
'Year_2', 'PCT_SHORT_2', 'PCT_V_SHORT_2',
'Year_3', 'PCT_SHORT_3', 'PCT_V_SHORT_3'
]
# Open and parse file with default value for missing
rfile = open(inpath, 'r')
reader = csv.DictReader(rfile, fieldnames=HEADERS, restval=missing or '0')
# Open and write to file with writer
wfile = open(outpath, 'w')
writer = csv.DictWriter(wfile, fieldnames=HEADERS)
if writeheaders:
writer.writeheaders()
# Write each row from reader to writer
for row in reader:
writer.writerow(row)
关于python - 如何将默认值插入缺失的 csv 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34777438/