2

我有一个如下的输入 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']

代码:

import csv
#Now read the recent 8 entries and print
cr = csv.reader(open("trend.csv","rb"))

for row in cr:  
    #print only the recent most 8 entries
    print row
4

3 回答 3

4

您可以将尾部配方与 n=8 的双端队列一起使用。

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

>>> from collections import deque
>>> deque(range(10000),8)
deque([9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999], maxlen=8)

csv.reader对象是一个迭代器将有限长度的双端队列应用于 csv 阅读器,您就可以开始了:

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']
于 2013-06-27T03:51:21.387 回答
1
import csv

# Open the file with a "with" statement to provide automatic cleanup
# in case of exceptions.
with open("trend.csv","rb") as file:
    cr = csv.reader(file)
    lines = [row for row in cr]
# Use slice notation and the wonderful fact that python treats
# negative indices intelligently!
for line in lines[-8:]:
    print line
于 2013-06-27T03:50:01.980 回答
0

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

for row in list(cr)[-8:]:  
    print row
于 2013-06-27T03:38:20.353 回答