Python-仅将新文件复制到另一个目录

use*_*935 5 python copying

我正在尝试仅将文件从一个目录复制到另一个目录,如果这些文件尚不存在。

因此,如果我的目录A的文件为“ 1.txt,2.txt,3.txt”,目录B的文件为“ 1.txt,2.txt”,则我只想将“ 3.txt”复制到目录B中而不重写其他文件。

我是Python初学者,我已经花了数小时进行了很多研究,但似乎找不到答案!救命!

谢谢

Tho*_*ohm 5

我会帮助你,并引导你找到答案(但我不会直接把它给你!)。

所以,首先,最基本的文件编辑功能都在os模块中,所以让我们在脚本的顶部导入它:

import os
Run Code Online (Sandbox Code Playgroud)

现在让我们看看如何检查文件是否存在。[一些研究表明该os.path模块有一个函数调用exists它检查文件是否存在!] 所以现在我们已经设置好了,但我们必须弄清楚如何获取目录 A 中的所有文件。看起来该os模块适用于此也有这个listdir功能。如果我们有一个名为“directoryone”的目录,我们可以通过以下方式获取其中的所有文件/目录(然后将它们放入列表中):

[file for file in os.listdir("directoryone")]
Run Code Online (Sandbox Code Playgroud)

但是我们只想获取文件,所以我们必须添加一个if语句来缩小我们的列表:

[file for file in os.listdir("directoryone") if os.path.isfile(os.path.join("directoryone", f))]
Run Code Online (Sandbox Code Playgroud)

所以现在我们有了一个获取目录中所有文件的语句,并且我们有一种方法来检查文件是否存在。我们需要做的最后一件事是弄清楚如何复制文件。我们必须为此导入shutil模型:

import shutil
Run Code Online (Sandbox Code Playgroud)

然后我们可以这样使用该shutil.copy函数:

shutil.copy(srcfile, dstdir)
Run Code Online (Sandbox Code Playgroud)

所以我们最终会得到这个代码:

import os, shutil

directorya = "exampledir"
directoryb = "exampledir2"
files = [file for file in os.listdir(directorya) if os.path.isfile(os.path.join(directorya, file))]
for file in files:
    if not os.path.exists(os.path.join(directoryb, file)):
        shutil.copy(os.path.join(directorya, file), directoryb)
Run Code Online (Sandbox Code Playgroud)