【发布时间】:2017-05-01 13:36:36
【问题描述】:
我正在尝试读取一个并写入第二个 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('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)
问题在于它读取了headerline,所以它在第一次迭代后返回错误。问题出在哪里?
【问题讨论】:
-
你能准确地发布你得到的错误吗?你可以跳过第一次迭代。
-
如果你做了
for n, line in enumerate(reader): if n > 0: <blah>呢? -
pandas 的
read_csv函数有一个skiprows和header参数,它们中的任何一个都应该能够在这里为您提供帮助。 pandas.pydata.org/pandas-docs/stable/generated/… -
我不确定我是否理解您的错误描述。标题和问题主体之间似乎有所不同。您遇到的一个非常明显的问题是,当您计算其长度时,您正在耗尽
reader生成器(不是file.seek不会帮助您)。一旦你这样做了,你就不能再次迭代它。要解决此问题,请将其转换为列表。然后你可以在它上面调用len并迭代它直到你的心满意足。那是假设它不是一个非常大的文件。在这种情况下,创建列表可能不是一个好主意。 -
当我运行它时,它运行完成。我认为如果你能告诉我们什么错误,由哪一行发出,换句话说,重现堆栈跟踪,这将有所帮助。问题可能出在您的数据中:例如,如果您的 csv 没有标题为“数字”的列,您将收到一个关键错误。
标签: python python-2.7 csv