使用csv阅读器后无法使用

时间:2019-02-13 05:52:54

标签: python python-3.x csv

我被赋予编写脚本的任务,以检查CSV文件中给定数据的MX记录。我首先尝试使用正则表达式进行检查,然后再尝试读取CSV文件。我也想记录进度,所以我要打印行号,但是每当我使用cvs_reader对象计算行长时,我都无法进入for循环

import csv
with open('test_list.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    data = list(csv_reader)
    row_count = len(data)
    for row in csv_reader:
            print({row[2]})
            line_count += 1
            print('Checking '+ str(line_count) +' of '+ str(row_count))    
    print('Processed lines :'+str(row_count))

我只得到
的结果 加工线:40
python脚本的新功能。请帮助

我的test_list.csv看起来像这样

fname, lname, email
bhanu2, singh2, bhanudoesnotexist@doesnotexit.com
bhanu2, singh2, bhanudoesnotexist@doesnotexit.com
bhanu2, singh2, bhanudoesnotexist@doesnotexit.com
bhanu2, singh2, bhanudoesnotexist@doesnotexit.com
Total 40 times continued 

2 个答案:

答案 0 :(得分:2)

第一件事csv数据与这个问题无关,

解决方案:

import csv

input_file = open("test_list.csv", "r").readlines()
print(len(input_file))
csv_reader = csv.reader(input_file)

line_count = 0
# data = list(csv_reader)
# row_count = len(data)

for row in csv_reader:
    print({row[2]})
    line_count += 1
    print('Checking ' + str(line_count) + ' of ' + str(len(input_file)))
print('Processed lines :' + str(len(input_file)))

问题识别:

with open('test_list.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    data = list(csv_reader)
    row_count = len(data)

在您的代码data = list(csv_reader)中,由于此行,您耗尽了变量。因此它将无法在for循环中循环

因此,您可以像这样读取csv文件

input_file = open("test_list.csv", "r").readlines()
print(len(input_file))

然后使用csv.reader()

答案 1 :(得分:2)

csv.reader返回一个可迭代对象,当您使用list(csv_reader)读取CSV的所有行时,您已经穷尽了可迭代对象,因此当您想再次遍历csv_reader时有了for循环,就没有迭代的余地了。

由于在变量data中有一个完整的行清单,因此您可以简单地对其进行迭代。

更改:

for row in csv_reader:

收件人:

for row in data: