尝试使用seek()获取CSV文件的最后一行时发生AttributeError [英] AttributeError when trying to use seek() to get last row of csv file

查看:106
本文介绍了尝试使用seek()获取CSV文件的最后一行时发生AttributeError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从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 .我从以下问题的答案之一中得到了这个主意 查看全文

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆