Python CSV读取文件用于输入2个值。增量号码和名称。
记录以百万计,大部分时间都在开始时停止。
如何在写入数字上保留增量编号的日志,以便在停止的地方拾取它。
import csv
data = {}
with open("readfile.csv", "r") as f:
for line in f.readlines():
num,name = line.strip().split(',')
data[num] = name
with open("output.csv", "wb") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Number", "Name"])
答案 0 :(得分:1)
一种解决方案是使用Python文件seek()和tell()功能。
您可以使用tell读取当前位置偏移量并将其存储在另一个文件中。
然后您可以打开文件并使用搜索移动到该位置。
示例功能将是:
import os
if not os.path.exists('readfile.csv'):
with open("readfile.csv", "wb") as read_f:
with open("position.dat", "wb") as pos_fi:
read_f.write('aaa,111\n')
read_f.write('bbb,222\n')
read_f.write('ccc,333\n')
read_f.write('ddd,444\n')
pos_fi.write('0')
data = {}
with open('position.dat', 'rb') as pos_f:
ps = pos_f.read()
print 'Position is : ', ps
p = int(ps)
# open your data file and the position file
with open('readfile.csv', 'rb') as read_f:
# read the offset position and seek to that location
read_f.seek(p)
for line in iter(read_f.readline, ''):
num,name = line.strip().split(',')
print num, name
data[num] = name
position = str(read_f.tell())
# store your new offset position
with open("position.dat", "wb") as pos:
pos.write(position)
编辑:
此示例现在有效。
如果您运行代码,它将创建文件。
如果您随后编辑'readfile.csv'并追加更多行,请再次运行该代码。它将从中断处开始,并打印出新的线条。
请注意使用seek(),您不能直接在文件对象上使用readlines()。诀窍是将它包装在迭代器中,如上所述。
你必须调整你的代码,因为我不确定你想要读写什么。
是的,你可以在追加模式下打开,写到文件的末尾。
答案 1 :(得分:1)
csvfile
是一个文件对象,因此您可以使用seek
和tell
函数将光标移动到文件上。所以,当你完成写作时,你可以通过pos = csvfile.tell()
得到当前的位置;然后,在下一次开幕时,只需csvfile.seek(pos)
。
请注意,每次都必须以相同的模式打开文件才能使pos
可用(二进制可能是个好主意)。
另一个想法就是在附加模式下打开csvfile
:with open('output.csv', 'ab')
。这写在文件的末尾。