我有一个日志文件由另一个进程编写,我想要观察更改.每次发生变化时,我都想读取新数据,对其进行一些处理.
最好的方法是什么?我希望PyWin32库中有一些钩子.我找到了这个win32file.FindNextChangeNotification功能,但不知道如何让它看到一个特定的文件.
如果有人做过这样的事情,我会非常感激听到......
[编辑]我应该提到我是在一个不需要轮询的解决方案之后.
[编辑]诅咒!这似乎不适用于映射的网络驱动器.我猜Windows不会像在本地磁盘上那样"听到"文件的任何更新.
在Python 2.6中从迭代器获取最后一项的最佳方法是什么?例如,说
my_iter = iter(range(5))
Run Code Online (Sandbox Code Playgroud)
什么是最短的代码/最干净的方式4来自my_iter?
我可以做到这一点,但它看起来效率不高:
[x for x in my_iter][-1]
Run Code Online (Sandbox Code Playgroud) 我想在Python中输出tail -F或类似的东西,而不会阻塞或锁定.我发现一些真正的旧代码到做在这里,但我想一定有更好的方法或通过图书馆现在做同样的事情.谁知道一个?
理想情况下,tail.getNewData()每次我想要更多数据时,我都会有类似的东西.
我有一个文件,我不知道它会有多大(它可能很大,但尺寸会有很大差异).我想搜索最后10行左右,看看是否有任何一个字符串匹配.我需要尽可能快速有效地做到这一点,并且想知道是否有更好的东西:
s = "foo"
last_bit = fileObj.readlines()[-10:]
for line in last_bit:
if line == s:
print "FOUND"
Run Code Online (Sandbox Code Playgroud) 我需要从一些非常大(几百兆字节)的文本文件中提取最后一行来获取某些数据.目前,我使用python循环遍历所有行,直到文件为空,然后我处理返回的最后一行,但我确信有一种更有效的方法来执行此操作.
使用python检索文本文件的最后一行的最佳方法是什么?
对于某些关键字的出现,观察不断增长的文件尾端的pythonic方法是什么?
在shell中我可能会说:
tail -f "$file" | grep "$string" | while read hit; do
#stuff
done
Run Code Online (Sandbox Code Playgroud) 我有一个大约15GB的文件,它是一个日志文件,我应该分析输出.我已经对一个类似但非常小的文件进行了基本解析,只需几行日志记录.解析字符串不是问题.问题是巨大的文件及其包含的冗余数据量.
基本上我正在尝试制作一个我可以说的python脚本; 例如,给我5000个文件的最后一行.这又是基本的处理论点和所有这些,没有什么特别的,我可以做到这一点.
但是,如何定义或告诉文件阅读器只读取我从文件末尾指定的行数?我试图跳过文件开头的huuuuuuge数量,因为我对这些不感兴趣,说实话,从txt文件中读取大约15GB的行需要太长时间.有没有办法犯错误...从文件末尾开始阅读?这甚至有意义吗?
这一切都归结为读取15GB文件的问题,一行一行需要太长时间.所以我想在开始时跳过已经冗余的数据(至少对我来说是冗余的),只读取我想要读取的文件末尾的行数.
明显的答案是手动只是将N行的数量从文件复制到另一个文件,但有没有办法半自动地神奇地只是用python读取文件末尾的N行数?
我正在编写一个程序,它会定期解析Apache日志文件以记录它的访问者,带宽使用情况等.
问题是,我不想打开日志并解析我已经解析过的数据.例如:
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
如果我解析该文件,我将保存所有行,然后保存该偏移量.这样,当我再次解析它时,我得到:
line1
line2
line3 - The log will open from this point
line4
line5
Run Code Online (Sandbox Code Playgroud)
第二轮,我会得到第4行和第5行.希望这是有道理的......
我需要知道的是,我该如何做到这一点?Python有seek()函数来指定偏移量...所以我只是在解析之后得到日志的文件大小(以字节为单位)然后在第二次记录它时使用它作为偏移量(在seek()中)?
我似乎无法想到一种编码方式>.<
我有一个 csv 文件,它会一直增长到大约 48M 行。
在向它添加新行之前,我需要阅读最后一行。
我尝试了下面的代码,但它太慢了,我需要一个更快的替代方案:
def return_last_line(filepath):
with open(filepath,'r') as file:
for x in file:
pass
return x
return_last_line('lala.csv')
Run Code Online (Sandbox Code Playgroud)