【问题标题】:Python Open File path that changes dynamically动态更改的 Python 打开文件路径
【发布时间】:2016-04-05 11:04:31
【问题描述】:

我有一个全天更新的文件,该文件的名称随着文件更新时间的时间签名而变化。

例如

\文件夹\todolist\grocerylist_2015-12-30-093000.csv

如何在不手动更新完整文件路径的情况下在 python 中打开此文件?

【问题讨论】:

  • 它是目录中唯一的文件,还是保留旧版本?

标签: python regex file csv


【解决方案1】:

您可以使用glob 模块来处理这个问题。

import glob
file_path = glob.glob('\\folder\\todolist\\grocerylist_*.csv')[0]

如果文件比较多,只需要最近的,可以排序取最后一个:

file_path = sorted(glob.glob('\\folder\\todolist\\grocerylist_*.csv'))[-1]

【讨论】:

  • 假设只有一个文件与模式匹配,如果还有更多,您将需要最新创建的文件,这将涉及排序
【解决方案2】:

也许你可以使用 python glob 模块打开前缀为grocerylist_的文件

import glob
path = glob.glob('/folder/todolist/grocerylist_*.csv')[0]

【讨论】:

    【解决方案3】:

    如果您想查看文件创建,我建议您使用 watchdog 之类的东西,这将始终为您提供与您的模式匹配的最新创建文件:

    import sys
    import time
    from watchdog.observers import Observer
    from watchdog.events import PatternMatchingEventHandler
    class Handler(PatternMatchingEventHandler):
        def __init__(self, regexes):
            super(Handler, self).__init__(regexes)
    
        def process(self, event):
            print(event.src_path, event.event_type)
    
    
        def on_created(self, event):
            self.process(event)
    
    if __name__ == '__main__':
        import os
        pth = sys.argv[1:]
        observer = Observer()
        pth = pth[0] if pth else "./"
        observer.schedule(Handler([os.path.join(pth, "grocerylist_*.csv")]), path=pth[0] if pth else './')
        observer.start()
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            observer.stop()
    
        observer.join()
    

    当创建与您的模式匹配的文件时,将调用 on_created 并调用 process,您可以在该方法中做任何您喜欢的事情:

    ~$ python3 watch.py  & 
    [15] 21005
    padraic@home:~$ touch grocerylist_12345.csv
    padraic@home:~$ ./grocerylist_12345.csv created
    

    如果你想打开文件,就在进程中进行。

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2011-06-17
      相关资源
      最近更新 更多