【问题标题】:DictWriter not receiving my data from DictReaderDictWriter 没有从 DictReader 接收我的数据
【发布时间】:2015-08-17 20:47:20
【问题描述】:

我正在读取一个csv 文件,其中第一行是我的标题行。我已验证标头已正确传递,但我的输出文件仍为空白。它不会引发任何错误。

def main():
    infile = sys.argv[1]
    outfile = sys.argv[2]
    myreader = csv.DictReader(open(infile, 'rbU'))
    for line in myreader:
        print(line['ADDR_NAME'])
    mywriter = csv.DictWriter(open(outfile, 'wb'), 
                              fieldnames=myreader.fieldnames)
    #print(mywriter.fieldnames)
    for row in myreader:
        mywriter.writerow(outfile)

【问题讨论】:

  • 你没有关闭outfile。同样在处理文件时,最好使用with 语句,例如with open(...) as f: ....

标签: python csv python-2.6


【解决方案1】:

您应该在最后一行将 dict 传递给 mywriter.writerow,而不是像您当前所做的那样传递一个字符串(文件路径)。请参阅writer docs

如果您只是想将所有行从 myreader 复制到 mywriter,您还需要重新安排一下:先打开阅读器和编写器,然后合并两个 @987654325 @循环:

def main():
    infile = sys.argv[1]
    outfile = sys.argv[2]
    myreader = csv.DictReader(open(infile, 'rbU'))
    mywriter = csv.DictWriter(open(outfile, 'wb'),
                              fieldnames=myreader.fieldnames)
    for row in myreader:
        print(row['ADDR_NAME'])
        mywriter.writerow(row)

正如 Cristian 所提到的,.close 向您发送 open 文件也是一种很好的做法,但这不应该是您的问题。

【讨论】:

  • 让我感到困惑的是DictReader 字典的引用是什么。那我应该通过mywriter.writerow(row)吗?
  • 值得注意的是,OP 示例中的第一个for 耗尽了myreader,因此第二个for 的迭代次数为零。
  • outfile 是一个字符串,而不是一个文件对象。
  • mywriter.writerow(outfile) -> mywriter.writerow(row) 如果我没记错的话。
  • @flybonzai 与关键字相关的错误是一个奇怪的错误,但我认为自动更正一定起作用了——我调用了第二个DictWriter 参数filenames,而它应该是fieldnames。试试看。
猜你喜欢
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多