Python 将DictReader写入CSV时出错

Python 将DictReader写入CSV时出错,python,csv,dictionary,field,writer,Python,Csv,Dictionary,Field,Writer,我有以下代码: def fillBlanks(): # There are duplicate fields in the 'HEADERS' list. A better 'HEADERS' list might be: # HEADERS = ['ST', 'Year', 'PCT_SHORT', 'PCT_V_SHORT'] HEADERS =['ST','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PC

我有以下代码:

def fillBlanks():

    # There are duplicate fields in the 'HEADERS' list. A better 'HEADERS' list might be:
    # HEADERS = ['ST', 'Year', 'PCT_SHORT', 'PCT_V_SHORT']
    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')
    fileb = open(outputDir+"PCT_SHORT_V_SHOR.csv", 'wb')
    reader = csv.DictReader(fileH, HEADERS,restval=0)

    for row in reader:
      print row
它输出以下内容:

 # The `None` key is the result of the data row having more columns than the 'HEADERS' list has fields.
 {None: ['2012', '36', '12'], 'PCT_SHORT': '19', 'Year': '2013', 'PCT_V_SHORT': '17', 'ST': 'OK'}
 {'PCT_SHORT': 0, 'Year': 0, 'PCT_V_SHORT': 0, 'ST': 'AZ'}
 {None: ['2012', '14', '1'], 'PCT_SHORT': '24', 'Year': '2013', 'PCT_V_SHORT':  '2', 'ST': 'ID'}
其中0填充以前缺少的字段

我该如何将每一行写入CSV。我一直在尝试使用一些类似的东西

with(fileb) as out:
  csv_out=csv.writer(out)

csv_out.writerow(['ST','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT','Year','PCT_SHORT','PCT_V_SHORT'])

for row in reader:
  csvwriters.writerow(row)
我犯了个错误

sequence expected

我也尝试过使用DictWriter,但我不熟悉它。我对python非常陌生。是否仍然可以简单地将DictReader的结果行写入一个新的CSV?

关于
DictWriter
对象,您是正确的

该对象可用于从
dict
写入
csv
文件:

with(fileb) as csvfile:
    csv_out = csv.DictWriter(csvfile, fieldnames=HEADERS)

    csv_out.writeheader()

    for row in reader:
        csv_out.writerow(row)
要替换从输入读取的空白值,请执行以下操作:

# The names of the fields you want to check
fields = ['ST', 'Year']
# The value you want to replace a blank with. In this case, a 0
marker = 0

for row in reader:
    # Check the values, within this row, for each of the fields listed 
    for field_name in fields:
        field_value = str(row[field_name]).strip()

        row[field_name] = field_value or marker   

csv_out.writerow(row)

我已经尝试了这个,我收到了另一个错误。错误!序列项0:应为字符串,非类型foundError!序列项0:预期字符串,NoNEType FunDI从输入文件中删除一行不良数据,现在写入,但不替换空白值。你知道为什么会这样吗。当我打印行时,它们打印正确。您需要手动替换空白值。我将更新我的答案。这对1个字段有效。有没有办法处理多个字段?要写入
csv
文件的数据格式是什么?
标题
中存在重复的字段,这些字段会产生键为
None
的行。这些字段是整数。也许我需要更改重复的标题?我可以很快做到这一点。我进去更改了标题,还添加了缺少的标题。我仍然会犯同样的错误。一开始我的主要问题是,我有一些字段丢失了,我想用0填充。因此,我之所以使用DeCutRADER。您需要确保标题> /Cord>列表具有与您正在阅读的数据相同的列数,从代码“> PCTSHealthVxSt.CSV < /代码>。我这样做,它正在编写,但不能像我想象的那样用0替换空白值。