Python 创建监视目录的文件列表
我在一个目录中设置了一个watchfolder,并希望它在每次出现新文件时都将每个filmename追加到一个列表中 以下是我想做的:Python 创建监视目录的文件列表,python,python-3.x,Python,Python 3.x,我在一个目录中设置了一个watchfolder,并希望它在每次出现新文件时都将每个filmename追加到一个列表中 以下是我想做的: import sys import time import logging from watchdog.observers import Observer from watchdog.events import LoggingEventHandler if __name__ == "__main__": logging.basicC
import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
#set file path
#path = sys.argv[1] if len(sys.argv) > 1 else '.'
path = "C:\\Users\\Ingest\\Downloads"
#logging
event_handler = LoggingEventHandler()
#start observing
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
#start
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
var_1 = observer
directory_evaluation = []
for file in var_1:
if file == "%.mxf" or "%.mov":
directory_evaluation.append(file)
print(directory_evaluation)
显然,我不能把“观察者”和一个变量联系起来,因为它不是一个可数。
我能做些什么来修复它?根据您的评论,我假设您当前有两个文件名列表,它们位于两个目录中,
文件目录A
和文件目录B
。您需要这些列表的交集。由于目录中的文件名必须是唯一的,因此可以将列表转换为集合,并对集合使用内置的交叉运算符:
files_dir_A = [f for f in os.listdir('path/to/dir/A') if f.endswith(extension)]
files_dir_B = [f for f in os.listdir('path/to/dir/B') if f.endswith(extension)]
result = list(set(files_dir_A) & set(files_dir_B))
因此,给出一个具体示例,列表如下所示:
files_dir_A = ['file1', 'file2', 'file3']
files_dir_B = ['file2', 'file3', 'file4']
result = ['file2', 'file3']
我不明白你在这里想干什么。
InotifyObserver
对象是不可编辑的。事实上,您可以将对象分配给您想要的任何变量(例如,var_1=observer
是有效的,尽管不必要)。仔细检查文档,了解如何正确使用observer对象。我只是快速检查了文档,没有发现任何提示,说明此功能是软件包的一部分(如果我错了,请纠正我)。在这种情况下,您似乎必须自己实现它。为了帮助您,请尝试重新表述您的问题,并指定“它们的共同点”(文件名、大小等)是什么意思。我正在尝试获取放入两个不同目录的每个文件的列表,并查看它们的共同点我在目录中添加了一个watchfolder,我真的不想在识别后把那些文件名列给我。如果我希望列出当前文件,则此方法有效,但如果有人删除其中任何一个文件,则此方法无效:```extension1=“.mov”directory_evaluation=[]for arq in os.listdir(path):if arq.endswith(extension1):directory_evaluation.append(arq)directory_evaluation.sort()打印(“id:,directory_evaluation”)``@DocDriven我所说的“有共同点”:list_1=[1,2,3]list_2=[1,2,4]我想返回的内容:[1,2]这是我以前尝试过的。问题是,这段代码给出了我现在目录上的内容。我想要一个列表,当它们放入watchfolder目录时,请注册文件名。就像日志列表一样,某种寄存器或每个文件都会发送到该目录。@FlaviaBarcellos是inotify
您在寻找什么?