本文介绍了从csv文件读取最后一行Python错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从csv文件返回最后一行。我修改另一个函数,我以前写的返回从文本文件的最后一行。它似乎按照预期工作,但现在当我调用的函数,它抛出一个错误。

  reader.seek(0,os.SEEK_END)
AttributeError:'_csv.reader'object没有属性' seek'






  import os 
import csv
def getLastFile(filename):
distance = 1024
open(filename,'rb')as f:
reader = csv。 reader(f)
reader.seek(0,os.SEEK_END)
如果reader.tell()<距离:
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

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

解决方案

这里有一个略微变化的核心概念在接受的答案适用于您的问题的变化。由于每行可能有不同的长度,因此无需读取整个文件。

  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

更新

使用 deque 更简单,更快的方法。我从这个问题的答案之一得到了想法。

 从集合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]
除了IndexError:#空文件
lastrow = None
return lastrow


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? Thank you!

解决方案

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

Update

Here's a simpler and likely faster way to do it using a deque. I got the idea from one of the answers to the question How to read an output line containing a list of integers produced by python.

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

这篇关于从csv文件读取最后一行Python错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 03:40