我试图从csv文件返回最后一行.我正在修改我之前写的另一个函数,它返回文本文件的最后一行.它似乎首先按预期工作,但现在当我调用该函数时它会抛出一个错误.
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
有人可以帮我修改我的代码吗?我很确定你可以用这种方式使用搜索,也许我错了?
以下是问题的公认答案中的核心概念的略微变化.csv.reader告诉它何时应用于您的问题变体的最后一行.由于每一行的长度可能不同,因此无需读取整个文件.
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
.我从问题的答案之一得到了这个想法如何读取包含生成的整数列表的输出行.
from collections import deque import csv def get_last_row(csv_filename): with open(csv_filename, 'r') as f: try: lastrow = deque(csv.reader(f), 1)[0] except IndexError: # empty file lastrow = None return lastrow