Python CSV阅读器不';不要跳过第一行
我正在尝试从一个CSV文件读取和写入第二个CSV文件。问题是,在读取输入CSV文件之前,我需要知道该文件中有多少行Python CSV阅读器不';不要跳过第一行,python,python-2.7,csv,Python,Python 2.7,Csv,我正在尝试从一个CSV文件读取和写入第二个CSV文件。问题是,在读取输入CSV文件之前,我需要知道该文件中有多少行 with open('csv/file.csv') as f: with open('output/output_{}.csv'.format(time.strftime("%Y%m%d-%H%M%S")), 'wb') as o: reader = csv.DictReader(f) reader.fieldnames.append('VA
with open('csv/file.csv') as f:
with open('output/output_{}.csv'.format(time.strftime("%Y%m%d-%H%M%S")), 'wb') as o:
reader = csv.DictReader(f)
reader.fieldnames.append('VAT added')
rows = sum(1 for _ in reader)
f.seek(0)
writer = csv.DictWriter(o, fieldnames=reader.fieldnames)
writer.writeheader()
for n,line in enumerate(reader):
print line
print '{} lines remaining'.format(rows-n)
code = line['number'].strip()
...
writer.writerow(line)
问题是它读取标题
行,因此在第一次迭代后返回错误。问题在哪里
问题。。。它在第一次迭代后返回错误
我不知道你会犯什么错误,但我会
类型错误:“str”不支持缓冲区接口
原因是这行代码:
with open('output/output_{}.csv'.format(time.strftime("%Y%m%d-%H%M%S")), 'wb') as o:
不要在二进制模式下打开csv
文件wb
,更改为w
,例如
with open('output/output_{}.csv'.format(time.strftime("%Y%m%d-%H%M%S")), 'w') as o:
使用Python:3.4.2测试您能准确地发布您得到的错误吗?您可以跳过第一次迭代。如果您对n执行了
,请在enumerate(reader)中执行第行操作:如果n>0:
?pandas的read\u csv
函数有一个skiprows
和header
参数,这两个参数都应该可以帮助您。我不确定我是否理解您的错误描述。标题和问题主体似乎有所不同。一个非常明显的问题是,当您计算读取器
生成器的长度时,它正在耗尽资源(不知道file.seek
对您没有帮助)。一旦你这样做了,你就不能再重复它了。若要避开此问题,请将其转换为列表。然后你可以在上面调用len
,并对它进行迭代,直到你的心内容。这是假设它不是一个很大的文件。在这种情况下,创建一个列表可能不是一个好主意。当我运行它时,它将运行到完成。我认为,如果您能告诉我们由哪一行发出的错误,换句话说,复制堆栈跟踪,会有所帮助。问题可能出在您的数据中:例如,如果您的csv没有标题为“number”的列,您将得到一个键错误。