Python 如何区分父路径及其子路径?
在这段代码中,我试图监视文件的创建。我在您创建的函数的Python 如何区分父路径及其子路径?,python,python-3.x,Python,Python 3.x,在这段代码中,我试图监视文件的创建。我在您创建的函数的中给出了if语句,以区分文件夹1及其子路径 当我在文件夹1中创建文件时,它会打印父路径消息,但当我在其他路径中创建文件时,它仍会打印父路径消息。虽然这次它应该打印子路径消息 import os import time from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import multiprocessing
中给出了if语句,以区分文件夹1
及其子路径
当我在文件夹1
中创建文件时,它会打印父路径
消息,但当我在其他路径中创建文件时,它仍会打印父路径
消息。虽然这次它应该打印子路径
消息
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import multiprocessing
class MyHandler(FileSystemEventHandler):
def on_created(self, event):
print(f'event type: {event.event_type} path : {event.src_path}')
if folder1:
print("Parent path")
else:
print("Child path")
def monitor_folders(path):
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
folder1 = "/home/bilal/Videos/folder1/"
if __name__ == "__main__":
m1 = monitor_folders(folder1)
m1.start()
m1.join()
这是因为在if语句中,您检查了以下条件:folder1
。
这与询问bool(folder1)==True相同。但是,folder1
是一个变量,它包含字符串“/home/bilal/Videos/folder1/”
。As字符串在包含任何字符时始终为True
,在为空字符串时始终为False
因此,您的条件将始终是True
,因为folder1
始终是相同的字符串,并且从不更改。如果folder1:
错误,您就理解了的含义。此表达式计算folder1
string的布尔值,除非它是空字符串,否则该值将始终为True
解决方案
添加此导入
from pathlib import Path
如果folder1:
为,则将更改为
if Path(event.src_path).parent.samefile(folder1):
这是正确的跨平台兼容表达式,用于评估所创建文件的包含文件夹是否与folder1
相同
结果
使用debian 10 PC和python 3.8进行测试,folder1=“/mnt/ramdisk/”
Pathlib
不起作用,但Pathlib
起作用。非常感谢。
event type: created path : /mnt/ramdisk/out3.xlsx
Parent path
event type: created path : /mnt/ramdisk/notebooks/out3.xlsx
Child path