以下代码可以正常使用。
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循环中没有任何反应。
如果这是真的,我如何将光标移回到开头而不关闭文件并重新打开它?如果没有请求帮助。
答案 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)