首页 > 解决方案 > Pandas:读取带有可变时间戳的大 CSV

问题描述

我每天都有一个日志文件,它放在我的 LAN 中的 http 服务器上,每天增长到大约 3MB。每隔 15 秒,新值就会写入该文件。它有一个时间戳列。还有很多其他列我不需要,所以我只需要大约 5 列。Pandas 应该通过只读取新记录来“监控”该文件。假设最后一次执行是 2018-02-05 00:00:04.467 那么这应该是下一个运行时的过滤器 (>2018-02-05 00:00:04.467) 并且在这个运行时结束时最后一个时间戳读取应该是过滤下一个等等......我是熊猫的新手,还没有找到任何类似的线程。

标签: pandasvariablestimestamp

解决方案


我猜 CSV 将逐行写入,因此您可以在变量中累积文件中的行数,而不是读取整个文件并进行过滤,rows然后在下次运行时,使用传递带有值read_csv的可选参数来跳过文件中的第一行,然后递增skiprowsrange(1, rows + 1)rows += len(df)

如果data.csv

a,b,c
1,2,3
4,5,6
7,8,9
3,2,1
6,5,4

并且rows = 2(即,最后一次读取文件时它有 2 行)然后

df = pd.read_csv("data.csv", usecols=["a", "c"], skiprows=range(1, rows + 1))

将是数据框

   a  c
0  7  9
1  3  1
2  6  4

你会增加rows

rows += len(df) # rows now equals 5, so 5 rows would be skipped in the next run

推荐阅读