我想把它转换成一个csv文件。为此,我读取文件的每一行,并应用一个函数来保存我想要的内容,然后将其打印到另一个csv文件中。你知道吗
我还想计算我读取的行数(原始数据集中的行数)和发生的错误数(原始数据集中有一些错误,我的函数将引发错误)
问题:我使用的以下代码(见下文)只返回确切行数的一半。事实上,当我在一个只有1000000行的文件上使用它的时候,nb\u行只有500000行。由于我想记录不“好”的行,我想我必须记录错误的行:/
data=csv.reader(open(path1,"rb"),delimiter=';',skipinitialspace=True)
output=csv.writer(open(path2,"wb"))
error=csv.writer(open(path3,"wb"))
nb_error=0
nb_lines=0
for row in data:
nb_lines=nbr_lines+1
try:
liste=data.next()
toprint=function(liste)
output.writerow(aprinter)
except Exception as e:
nb_error=nb_error+1
badline=[nb_lines,e]
error.writerow(badline)
我的回路怎么了? 提前感谢:)
出于某种原因,可以在循环中增加迭代器。
for row in data
每次使row
成为下一行。但是你做了liste=data.next()
-所以你又增加了。这意味着你每跳过一行:不仅是你的计数器错了,实际上你漏掉了一半的数据。你知道吗您应该删除该行,并在循环中引用
row
,而不是liste
。你知道吗这已经得到了回答,但您可以使用以下方法简化代码:
将来如果需要迭代和计数,应该考虑使用python的enumerate函数。以下是文档中的示例代码:
更少的代码==更少的bug,一般来说:D
每次执行此
liste = data.next()
时都会跳过一行。我还更改了增量,在python中它被缩短为+=
。你知道吗您还可以存储将
nb_lines
更改为row
的行,这样可能更容易找到错误。你知道吗相关问题 更多 >
编程相关推荐