Python CSV阅读器没有任何数据

时间:2014-06-20 04:38:06

标签: python list csv

以下代码可以正常使用。

with open(filename, 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        cur.execute(insertStatement, row)

当我插入这两行时,出现了问题。

with open(filename, 'rb') as f:
    reader = csv.reader(f)
    totalrows = len(list(reader))
    print totalrows # Print out the correct output
    for row in reader:
        cur.execute(insertStatement, row)   

我的猜测是当我指定totalrows = len(列表(读者)) 光标移动到文件的末尾,for循环中没有任何反应。

如果这是真的,我如何将光标移回到开头而不关闭文件并重新打开它?如果没有请求帮助。

3 个答案:

答案 0 :(得分:4)

没错,该文件已被使用,reader上的后续读取将不会返回数据。

你可以通过在底层文件上调用f.seek(0)来解决这个问题,即

with open(filename, 'rb') as f:
    reader = csv.reader(f)
    totalrows = len(list(reader))
    print totalrows # Print out the correct output
    f.seek(0)
    for row in reader:
        cur.execute(insertStatement, row)

答案 1 :(得分:1)

不是一次阅读,创建并丢弃一个列表,再读一遍,为什么不保留列表并对其进行迭代?

with open(filename, 'rb') as f:
    reader = csv.reader(f)
    allrows = list(reader)
    totalrows = len(allrows)
    print totalrows # Print out the correct output
    for row in allrows:
        cur.execute(insertStatement, row)   

此外,许多数据库库允许您一次插入多个记录,这通常比一次插入一个记录更快。检查您正在使用的数据库的文档。

答案 2 :(得分:0)

如果发生了这种情况,请尝试使用f.seek(0)将光标放回到开头。

with open(filename, 'rb') as f:
reader = csv.reader(f)
totalrows = len(list(reader))
print totalrows # Print out the correct output
f.seek(0)  # Moves pointer back to beginning of file
for row in reader:
    cur.execute(insertStatement, row)