尝试使用seek()获取CSV文件的最后一行时发生AttributeError [英] AttributeError when trying to use seek() to get last row of csv file
问题描述
我正在尝试从csv文件返回最后一行.我正在修改我先前编写的另一个函数,该函数从文本文件返回最后一行.起初它似乎按预期工作,但是现在当我调用该函数时,它将引发错误.
I am trying to return the last row from a csv file. I am modifying another function that I wrote previously that returns the last line from a text file. It seemed to work as expected at first, but now when I call the function it throws an error.
reader.seek(0, os.SEEK_END)
AttributeError: '_csv.reader' object has no attribute 'seek'
import os
import csv
def getLastFile(filename):
distance = 1024
with open(filename,'rb') as f:
reader = csv.reader(f)
reader.seek(0, os.SEEK_END)
if reader.tell() < distance:
reader.seek(0, os.SEEK_SET)
lines = reader.readlines()
lastline = lines[-1]
else:
reader.seek(-1 * distance, os.SEEK_END)
lines = reader.readlines()
lastline = lines[-1]
return lastline
有人可以帮我修改我的代码吗?我很确定您可以通过这种方式使用搜索,也许我弄错了?
Can someone please help me modify my code? I was pretty sure you could use seek in this way, maybe I'm mistaken?
推荐答案
Here's a slight variation of the core concept in the accepted answer to the question Have csv.reader tell when it is on the last line applied to your variation of the problem. Since each row is potentially a different length, there's really no way around having to read the whole file.
import csv
def get_last_row(csv_filename):
with open(csv_filename, 'r') as f:
lastrow = None
for lastrow in csv.reader(f): pass
return lastrow
更新
这是使用 collections.deque
.我从以下问题的答案之一中得到了这个主意
查看全文