首页 > 解决方案 > 将文件夹移动到自身:shutil,检查文件的路径是否与目标路径相同,如果是,则不执行任何操作

问题描述

我有以下代码按预期工作,期望源文件与目标文件相同。我试过os.path. isfile/isdir/exists了,但我碰壁了。

所以本质上这会循环file_list并移动列表中的文件到目的地。但是,可能会发生源和目标相同的情况,因此,如果文件的位置与目标相同,那么它会尝试将自身移动到自身并且显然会失败。所以在下面我需要添加一个检查,如果文件的位置(源)与目标相同,那么pass.

    def move_files(file_list, destination):
        for file in file_list:
            source_file = file
            shutil.move(source_file, destination)

在这种情况下目标是文件夹路径,源是文件夹路径+文件名,所以我需要忽略源的文件名并将路径与目标进行比较。

我觉得我过于复杂了,但任何帮助表示赞赏。

标签: python-3.xshutil

解决方案


您可以使用abspath和的dirname方法os.path。第一个返回目录的绝对路径,第二个提供路径的目录名称。

def move_files(file_list, destination):
    # just in case you don't provide absolute paths
    # you can also consider using `expanduser`
    destination = os.path.abspath(destination)
    for file in file_list:            
        file_abs_path = os.path.abspath(file)
        if os.path.dirname(file_abs_path) != destination: 
            shutil.move(file_abs_path, destination)

https://docs.python.org/3/library/os.path.html#os.path.abspath

https://docs.python.org/3/library/os.path.html#os.path.dirname

https://docs.python.org/3/library/os.path.html#os.path.expanduser


推荐阅读