python- 移动文件并检查重名

python- moving files and checking duplicate names

我正在尝试制作一种可以将文件从一个文件夹移动到另一个文件夹的代码。 例如,我在 /test1/ 文件夹中有名为 0001.jpg、0002.jpg ... 等的文件,如果相同的文件名不存在,我想将这些文件移动到 /test3/ 文件夹/测试2/。 因此,如果文件夹 /test1/ 和 /test2/ 中都有 0001.jpg,则 /test1/ 中的文件不会移动到 /test3/ 文件夹中,但是如果 /test1/ 中有 0002.jpg 而不是/test2/,移动到 /test/3.

我试过自己编写代码,但行不通。 你能帮忙吗? 提前致谢!

import os
import shutil

def Move_files(root_path, refer_path, out_path) :
    root_path_list= [file for file in os.listdir(root_path)]
    refer_path_list= [file for file in os.listdir(refer_path)]

    for file in root_path_list:
        if refer_path_list in root_path_list:
            shutil.move(os.path.join(os.listdir(root_path, file)),os.path.join(os.listdir(refer_path, file)))

if __name__ == '__main__' :
    Move_files("D:\Dataset\test1", "D:\Dataset\test2", "D:\Dataset\test3")

已更新:您可以使用 os.path.exists 检查该文件是否存在于您的其他目录中,然后只有在 [=12] 中不存在时才移动它=]:

if not os.path.exists(os.path.join(refer_path, file)):
    shutil.move(os.path.join(os.listdir(root_path, file)),os.path.join(os.listdir(refer_path, file)))

此外,os.listdir 只接受一个参数,即您要列出文件的目录路径。我认为您想将 shutil.move 语句更改为:shutil.move(os.path.join(root_path, file),os.path.join(out_path, file))

试试这个

import os
import shutil

def Move_files(root_path, refer_path, out_path) :
    root_path_list= [file for file in os.listdir(root_path)]
    refer_path_list= [file for file in os.listdir(refer_path)]

    for file in root_path_list:
        if file not in refer_path_list:
            shutil.move(os.path.join(os.listdir(root_path, file)),os.path.join(os.listdir(out_path, file)))

if __name__ == '__main__' :
    Move_files("D:\Dataset\test1", "D:\Dataset\test2", "D:\Dataset\test3")

您可以使用set 找出文件列表之间的差异。我添加了一个 isfile 检查以忽略子目录(例如 linux 中的“.”和“..”目录)并且由于 shutil.move 接受目标目录,因此无需构建目标文件名。

import os
import shutil

def Move_files(root_path, refer_path, out_path) :
    root_files = set(filename for filename in os.listdir(root_path)
        if os.path.isfile(filename))
    refer_files = set(filename for filename in os.listdir(refer_path)
        if os.path.isfile(filename))
    move_files = root_files - refer_files

    for file in move_files:
        shutil.move(os.path.join(root_path, file), out_path)

if __name__ == '__main__' :
    Move_files("D:\Dataset\test1", "D:\Dataset\test2", "D:\Dataset\test3")