Python csv:写入文件时保留标题

Python csv:写入文件时保留标题,python,csv,Python,Csv,我编写了一个简单的函数,通过添加或删除列,根据用户提供的CSV行数进行操作: def sanExt(ifpath, ofpath): with open(ifpath, "rb") as fin, open(ofpath, "wb") as fout: csvin = csv.reader(fin) csvout = csv.writer(fout, delimiter=",") fline = csvin.next() i

我编写了一个简单的函数,通过添加或删除列,根据用户提供的CSV行数进行操作:

def sanExt(ifpath, ofpath):
    with open(ifpath, "rb") as fin, open(ofpath, "wb") as fout:
        csvin = csv.reader(fin)
        csvout = csv.writer(fout, delimiter=",")
        fline = csvin.next()
        if len(fline) == 33:
            for row in csvin:
                row.insert(10, "NULL")
                csvout.writerow(row)
            print "AG"
        elif len(fline) == 35:
            print "AI"
        elif len(fline) == 36:
            print "AJ"
        else:
            print "Unknown"
我已经在第一个
if
语句中停止了,只是为了确保我的代码正常工作。本例中正确添加了列,但缺少标题

如何确保每一行都写入文件,而不仅仅是
[1:len(行)]


我的方法是完成所需工作的正确python方法吗?

使用csv.DictReader、csv.DictWriter及其方法来处理标题行,只需少量多余的代码。

如果通过列名访问不需要
csv.DictReader
,则传统的解决方案基于以下内容:

with open('in.csv') as fin, open('out.csv', 'wb') as fout:
   csvin = csv.reader(fin)
   csvout = csv.writer(fout)
   try:
       header = next(csvin)
       csvout.writerow(header)
   except StopIeration as e:
       pass # empty file - either handle, or we'll just continue and drop out of loop

   for row in csvin:
       csvout.writerow(row) # do some real work here...

报告异常(TypeError)时,回溯总是很有用的。如果不能做到这一点,告诉我们引发异常的行比您给我们的要好。引用文档:请注意,与DictReader类不同,DictWriter的fieldnames参数不是可选的。由于Python的dict对象没有顺序,因此没有足够的信息来推断该行写入csvfile的顺序。”请参阅刚才删除了我的答案,这正是您所建议的。我是通过反复试验而得到的,而不是代码fu。谢谢。