我打开一个文件并用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
答案 0 :(得分:8)
您第一次迭代时会读取整个文件,因此第二次没有任何内容可供阅读。由于您似乎第二次没有使用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')
如果您需要再次迭代原始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')
如果您不想再次打开该文件,可以查找开头,跳过标题,然后再次迭代。
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')
答案 1 :(得分:1)
在第二次循环之前添加wb.seek(0)
(返回文件的开头)和next(reader)
(跳过标题行)。
答案 2 :(得分:1)
您可以尝试将dict存储在列表中并输出
extract * from db.temp where DT < 'someDate'
to db.temp2;
答案 3 :(得分:1)
您可以创建字典列表,每个字典代表文件中的一行,然后计算列表的长度,或使用列表索引来打印每个字典项。
类似的东西:
with open('YourCsv.csv') as csvfile:
reader = csv.DictReader(csvfile)
rowslist = list(reader)
for i in range(len(rowslist))
print(rowslist[i])