动态更改的 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 打开文件路径的主要内容,如果未能解决你的问题,请参考以下文章