我想打开一个文件并从上次读取的位置继续读取。我的文件很大(20MB到1GB左右)。经过一些研究,我发现tell()和seek()是最有效的方法之一。我尝试了以下代码:
opened = open(filename, "rU")
f1 = csv.reader(opened)
k = []
for line in f1:
k.append(opened.tell())
当我这样做时,列表中的每个值都是8272 Long。这是否意味着我不能使用这个实现?我有什么遗漏吗?谢谢你的帮助!
我在Windows 7上运行Python 2.7。
更新
在整合了这里学到的所有内容并进行试错之后,我得到了以下代码。
opened = open(filename, "rU")
k = [0]
where = 1
for switch in opened:
where += len(switch) + 1
f = StringIO.StringIO(switch)
interesting = csv.reader(f, delimiter=',')
good_values = interesting.next()
k.append(where)
return k
这使用户能够准确地知道在文件中要前往的位置,同时仍然能够根据其格式解析它。我并不完全确定为什么需要不断添加偏移量(似乎换行符在len()函数中没有被准确计算)。
opened.seek
到上次处理的CSV行后面的文件偏移量,并将其传递给csv.reader构造函数呢?这应该会起作用。我不建议使用正则表达式处理大型CSV文件。 - piokuc