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

 灵123456妞子 发布于 2023-02-13 18:00

我试图从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

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

1 个回答
  • 以下是问题的公认答案中的核心概念的略微变化.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
    

    2023-02-13 18:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有