计算行数(csv模块)

2024-04-19 19:11:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把它转换成一个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)

我的回路怎么了? 提前感谢:)


Tags: 文件csv函数outputdata原始数据错误记录
3条回答

出于某种原因,可以在循环中增加迭代器。for row in data每次使row成为下一行。但是你做了liste=data.next()-所以你又增加了。这意味着你每跳过一行:不仅是你的计数器错了,实际上你漏掉了一半的数据。你知道吗

您应该删除该行,并在循环中引用row,而不是liste。你知道吗

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

csvreader.line_num - The number of lines read from the source iterator. This is not the same as the number of records returned, as records can span multiple lines.

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

>>> 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

每次执行此liste = data.next()时都会跳过一行。我还更改了增量,在python中它被缩短为+=。你知道吗

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 +=1
    try:
        toprint = function(row)
        output.writerow(aprinter)
    except Exception as e:
        nb_error += 1
        badline = [nb_lines,e]
        errors.writerow(badline)

您还可以存储将nb_lines更改为row的行,这样可能更容易找到错误。你知道吗

相关问题 更多 >