python读取csv最后一行_从csv文件读取最后一行Python错误

1586010002-jmsa.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值