在python中查看目录并解析最新生成的文本文件

时间:2015-05-12 03:17:36

标签: python parsing directory

我想询问是否有任何方法可以在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

谢谢。

2 个答案:

答案 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}}。如果没有更多的行添加到该文件,它将永远不会产生。