循环遍历csv.DictReader行不止一次

Pyd*_*man 5 python csv

我打开一个文件并阅读它csv.DictReader.我迭代了两次,但第二次没有打印.为什么这样,我怎样才能使它工作?

with open('MySpreadsheet.csv', 'rU') as wb:
    reader = csv.DictReader(wb, dialect=csv.excel)
    for row in reader:
        print row

    for row in reader:
        print 'XXXXX'

# XXXXX is not printed
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 10

您在第一次迭代时读取整个文件,因此第二次没有任何内容可供阅读.由于您似乎第二次没有使用csv数据,因此计算行数并在第二次迭代该范围会更简单.

import csv
from itertools import count

with open('MySpreadsheet.csv', 'rU') as f:
    reader = csv.DictReader(f, dialect=csv.excel)
    row_count = count(1)

    for row in reader:
        next(count)
        print(row)

for i in range(row_count):
    print('Stack Overflow')
Run Code Online (Sandbox Code Playgroud)

如果您需要再次遍历原始csv数据,则再次打开文件很简单.最有可能的是,您应该迭代第一次存储的某些数据,而不是再次读取文件.

with open('MySpreadsheet.csv', 'rU') as f:
    reader = csv.DictReader(f, dialect=csv.excel)

    for row in reader:
        print(row)

with open('MySpreadsheet.csv', 'rU') as f:
    reader = csv.DictReader(f, dialect=csv.excel)

    for row in reader:
        print('Stack Overflow')
Run Code Online (Sandbox Code Playgroud)

如果您不想再次打开文件,可以查找开头,跳过标题,然后再次迭代.

with open('MySpreadsheet.csv', 'rU') as f:
    reader = csv.DictReader(f, dialect=csv.excel)

    for row in reader:
        print(row)

    f.seek(0)
    next(reader)

    for row in reader:
        print('Stack Overflow')
Run Code Online (Sandbox Code Playgroud)