尝试使用seek()获取CSV文件的最后一行时发生AttributeError

发布于 2021-01-29 14:10:12

我正在尝试从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

有人可以帮我修改我的代码吗?我非常确定您可以通过这种方式使用搜索,也许我错了?

关注者
0
被浏览
221
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是已接受问题的答案中核心概念的一些细微变化,让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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看