Python 仅打印.csv文件中的最后8个条目

Python 仅打印.csv文件中的最后8个条目,python,csv,Python,Csv,我有一个输入csv文件,如下所示,我只想打印最近的8个条目。有人能提供如何做的输入吗 INPUT:- trend.csv ['2013-06-25 20:01', '10'] ['2013-06-25 20:06', '9'] ['2013-06-25 20:06', '8'] ['2013-06-26 20:06', '7'] ['2013-06-26 20:06', '6'] ['2013-06-26 20:06', '5'] ['2013-06-26 20:06', '4'] ['201

我有一个输入csv文件,如下所示,我只想打印最近的8个条目。有人能提供如何做的输入吗

INPUT:-
trend.csv

['2013-06-25 20:01', '10']
['2013-06-25 20:06', '9']
['2013-06-25 20:06', '8']
['2013-06-26 20:06', '7']
['2013-06-26 20:06', '6']
['2013-06-26 20:06', '5']
['2013-06-26 20:06', '4']
['2013-06-26 20:06', '3']
['2013-06-26 20:06', '2']
['2013-06-26 20:08', '1']

OUTPUT:-
['2013-06-25 20:06', '8']
['2013-06-26 20:06', '7']
['2013-06-26 20:06', '6']
['2013-06-26 20:06', '5']
['2013-06-26 20:06', '4']
['2013-06-26 20:06', '3']
['2013-06-26 20:06', '2']
['2013-06-26 20:08', '1']
代码:


如果内存/性能不是问题,您可以:

for row in list(cr)[-8:]:  
    print row
可以将与n=8的deque一起使用

这将创建一个双端队列,在该队列中,向末尾(右侧)添加一个项目将有效地从开头(左侧)弹出一个项目,以保持长度不超过最大长度:

>>> from collections import deque
>>> deque(range(10000),8)
deque([9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999], maxlen=8)
对象是一个迭代器。对csv读取器应用有限长度的deque,即可:

import csv
from collections import deque

with open('/tmp/trend.csv','rb') as fin:
    deq=deque(csv.reader(fin),8)

for sub_list in deq:
    print sub_list
在10行示例中,这将打印:

['2013-06-25 20:06', '8']
['2013-06-26 20:06', '7']
['2013-06-26 20:06', '6']
['2013-06-26 20:06', '5']
['2013-06-26 20:06', '4']
['2013-06-26 20:06', '3']
['2013-06-26 20:06', '2']
['2013-06-26 20:08', '1']

你试过存储8个条目吗?@IgnacioVazquez Abrams-我只想存储8个条目..但不知道怎么做..有输入吗?@IgnacioVazquez Abrams-我在last8=collections.deque(maxlength=8)的第17行收到一个错误文件“database.py”TypeError:“maxlength”是此函数的无效关键字参数。您是否确实使用了此代码<代码>读取器是上面定义的csv对象。这是
cr
在您的代码中…+1很好!但是使用
'rb'
打开
(或者在Python 3中使用
换行符=''
)@MarkTolonen:在Unix上--
'rb'
'r'
相同,但是
'rU
补偿了DOS/Windows/Mac行结束符而不是LF。我将CSV源文件更改为LF,因此Python代码更不依赖于平台。谢谢
import csv
from collections import deque

with open('/tmp/trend.csv','rb') as fin:
    deq=deque(csv.reader(fin),8)

for sub_list in deq:
    print sub_list
['2013-06-25 20:06', '8']
['2013-06-26 20:06', '7']
['2013-06-26 20:06', '6']
['2013-06-26 20:06', '5']
['2013-06-26 20:06', '4']
['2013-06-26 20:06', '3']
['2013-06-26 20:06', '2']
['2013-06-26 20:08', '1']