Python 计算行数(csv模块)

Python 计算行数(csv模块),python,Python,我有一个csv文件,我想把它转换成一个数字数据集。为此,我读取文件的每一行,并应用一个函数来保存我想要的内容,然后将其打印到另一个csv文件中 我还想做的是计算我读取的行数原始数据集中的行数和发生的错误数原始数据集中有一些错误,我的函数将引发错误 问题:对于我使用的以下代码,请参见下文,它只返回准确行数的一半。事实上,当我在一个只有1000000行的文件上使用它时,nb_行只有500000行。由于我想记录不好的行,我想我必须记录错误的行:/ data=csv.reader(open(path1,

我有一个csv文件,我想把它转换成一个数字数据集。为此,我读取文件的每一行,并应用一个函数来保存我想要的内容,然后将其打印到另一个csv文件中

我还想做的是计算我读取的行数原始数据集中的行数和发生的错误数原始数据集中有一些错误,我的函数将引发错误

问题:对于我使用的以下代码,请参见下文,它只返回准确行数的一半。事实上,当我在一个只有1000000行的文件上使用它时,nb_行只有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)
我的循环有什么问题?
提前感谢:

出于某种原因,您在循环中增加了迭代器。对于数据中的行,每次都使行成为下一行。但是,然后执行liste=data.next,所以再次递增。这意味着你每隔一行就跳过一行:错误的不仅仅是你的计数器,而是你实际上漏掉了一半的数据


您应该删除该行,并在循环中引用行而不是列表。

每次执行此liste=data.next时跳过一行。我还更改了增量,在python中它缩短为+=


您还可以将行更改为行,这样可能更容易找到错误。

这已经得到了回答,但您可以使用以下方法简化代码:

-从源迭代器读取的行数。 这与返回的记录数不同,因为记录可以 跨越多条线

将来如果需要迭代和计数,就应该考虑使用Python函数。以下是文档中的示例代码:

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

更少的代码==更少的bug,一般来说:D

nb_line=nbr_line+1您运行的代码中有拼写错误吗?对不起,我没有正确粘贴代码。我改了哇,真是个大错误。非常感谢您指出这一点!你救了我的命^^
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]