Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何区分父路径及其子路径?_Python_Python 3.x - Fatal编程技术网

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