Python csv读取器在与其他操作一起使用时不返回值

Python csv读取器在与其他操作一起使用时不返回值,python,csv,Python,Csv,我试图解析一个包含印度城市拼图的csv文件。我想要文件中的特定行 当我尝试此功能时,它的效果就像魅力: pinfile = open('pincodes.csv', 'r') csv_file = csv.reader(pinfile) for i, row in enumerate(csv_file): if i == 67208: x = " ".join(row) print(x) pinfile.close() pinfile = open

我试图解析一个包含印度城市拼图的csv文件。我想要文件中的特定行

当我尝试此功能时,它的效果就像魅力:

pinfile = open('pincodes.csv', 'r')

csv_file = csv.reader(pinfile)

for i, row in enumerate(csv_file):
    if i == 67208:
        x = " ".join(row)
        print(x)

pinfile.close()
pinfile = open('pincodes.csv', 'r')

totalrow = sum(1 for row in pinfile)  # To calculate number of rows

csv_file = csv.reader(pinfile)

for i, row in enumerate(csv_file):
    if i == 67208:
        x = " ".join(row)
        print(x)

pinfile.close()
结果:

Padlya B.O 451220 B.O交付坎德瓦印多尔中央邦Maheshwar西尼马尔中央邦

但当我在两行之间添加一行以计算文件中的行数时,for循环不会执行:

pinfile = open('pincodes.csv', 'r')

csv_file = csv.reader(pinfile)

for i, row in enumerate(csv_file):
    if i == 67208:
        x = " ".join(row)
        print(x)

pinfile.close()
pinfile = open('pincodes.csv', 'r')

totalrow = sum(1 for row in pinfile)  # To calculate number of rows

csv_file = csv.reader(pinfile)

for i, row in enumerate(csv_file):
    if i == 67208:
        x = " ".join(row)
        print(x)

pinfile.close()
不显示任何结果


请帮忙。我搜索了整个论坛,但找不到任何类似的内容。

您的总和迭代读取到文件的末尾,因此没有任何内容可供
csv
读取。在创建读卡器之前,请使用
pinfile.seek(0)
将文件重置为开头。

谢谢,这正是我犯的错误。感谢您保存我的一天。您的totalrow计算会计算文件中的行数,这可能与csv.reader返回的行数不同。与其将文件读取两次,不如将行读取到列表中,然后在列表中使用len()。我的csv文件大小超过50MB,使用csv.reader创建列表不是内存效率低下吗?此外,我还通过使用MS Excel打开文件确认了totalrow值,该值是正确的。读取两次文件不是很节省时间吗?我不知道你的限制,由你来选择,但我的偏好是不要做两次。。关于计数行:我不知道你的数据是什么样子,所以我建议在一般情况下,在单元格可能包含回车的情况下,使用更安全的方法。如果将来某个时候你的代码莫名其妙地出错了,不要来向我抱怨。一般来说,代码应该是防御性的,但如果需要,您可以选择不那么安全。祝你好运,我不是有意冒犯你的。我完全同意两次读取文件是低效的。但是我问了一个问题,如果文件大小约为100MB,那么如果我用csv文件中的行创建一个列表对象,它会冻结脚本吗?如果我在csv.reader上使用totalrow函数,会有什么改进吗?