我想询问是否有任何方法可以在python中查看目录并解析目录中生成的最新文本文件。
我有这个启动代码来解析某个文本文件。
import time
def follow(thefile):
thefile.seek(0,2)
while True:
line = thefile.readline()
if not line:
time.sleep(0.1)
continue
yield line
if __name__ == '__main__':
logfile = open(r'\\some directory\files.txt',"r")
loglines = follow(logfile)
for line in loglines:
print line,
看到粗体 files.txt ,我需要通过观察新生成的文本文件的目录来动态,并切换到最新的文本文件并解析它。
它将在Windows XP Service Pack 3上运行
我正在使用Python 2.7
我正在观看的目录也在使用Windows XP
谢谢。
答案 0 :(得分:0)
查看FindFirstChangeNotification
API
http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html
这里的方法是使用通过pywin32 win32file模块公开的MS FindFirstChangeNotification API。它需要一些解释:您可以获得某个目录的变更句柄(可选择使用其子目录)以进行某些更改。然后,您可以使用win32event中无处不在的WaitForSingleObject调用,该调用会在您的某个目录中发生更改时触发。
基本上因为Windows操作系统负责管理文件的创建/修改,您可以要求它在更改/创建文件时立即通知您。
答案 1 :(得分:0)
要检查新文件,请使用# Initialize before an event loop:
old_entries = set()
# You need a loop that calls two handlers, each handler returning soon.
# Inside your loop, check for a "new file" event this way:
now_entries = os.listdir(r'\\some directory')
now_entries.symmetric_difference_update(old_entries)
for new_entry in now_entries:
handle_new_file(new_entry)
重复获取当前位于目录中的文件列表。将条目保存在集合中,并计算集合与前一集合的差异。
follow()
您的计划需要监听两个事件:
你调用follow()
,它就像一个永不返回的事件处理程序。我想你希望那个处理程序返回一个主事件循环来检查每种事件。您的continue
函数永远不会返回,因为它while True
位于yield
无限循环中,除非将新行添加到文件中{{1}}。如果没有更多的行添加到该文件,它将永远不会产生。