AttributeError when trying to use seek () to get the last line of the csv file

I am trying to return the last line from a csv file. I am changing another function that I wrote earlier that returns the last line from a text file. At first it worked as expected, 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 help me change my code? I was sure that you can use the search this way, maybe I'm wrong?

+4
source share
2 answers

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

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
+11

csv reader , csv , csv. , > , .

import os

def get_last_line(fin):
    line_len = 80
    fin.seek(0, os.SEEK_END)
    file_size = fin.tell()
    while True:
        line_len = min(line_len * 2, file_size)
        fin.seek(-line_len, os.SEEK_END)
        lines = f.readlines()
        if len(lines) > 1 or line_len == file_size:
            return lines[-1]

csv:

import csv

print ', '.join(csv.reader([last_line]).next())
0

All Articles