动态更改的 Python 打开文件路径

Posted

技术标签:

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

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

例如

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

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

【问题讨论】:

它是目录中唯一的文件,还是保留旧版本? 【参考方案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

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

【讨论】:

以上是关于动态更改的 Python 打开文件路径的主要内容,如果未能解决你的问题,请参考以下文章

怎样更改文件保存的路径

怎么更改OUTLOOK EXPRESS中邮件的存储路径

python打开文件的路径

matlab更改打开是默认路径

python怎么创建一个txt文件

pathlib2 中文路径出错