Python-仅将新文件复制到另一个目录中
我试图将文件从一个目录复制到另一个目录,但前提是这些文件不存在 因此,如果目录A中有文件“1.txt,2.txt,3.txt”,目录B中有文件“1.txt,2.txt”,我只想将“3.txt”复制到目录B中,而不重写其他文件 我是一个Python初学者,在这方面我花了很多时间,做了大量的研究,但我似乎找不到答案!救命啊Python-仅将新文件复制到另一个目录中,python,copying,Python,Copying,我试图将文件从一个目录复制到另一个目录,但前提是这些文件不存在 因此,如果目录A中有文件“1.txt,2.txt,3.txt”,目录B中有文件“1.txt,2.txt”,我只想将“3.txt”复制到目录B中,而不重写其他文件 我是一个Python初学者,在这方面我花了很多时间,做了大量的研究,但我似乎找不到答案!救命啊 谢谢获取目录中的文件列表,您将使用 从两个列表中取一个差异 >>> set(a_files) - set(b_files) set(['3.txt']) 您将
谢谢获取目录中的文件列表,您将使用 从两个列表中取一个差异
>>> set(a_files) - set(b_files)
set(['3.txt'])
您将只获得3.txt
将此文件复制到文件夹B
导入shutil
import shutil
from os import listdir
from os.path import isfile, join
DIR_A = "<Complete path to A directory>"
DIR_B = "<Complete path to B directory>"
onlyfiles_A = [ f for f in listdir(DIR_A) if isfile(join(DIR_A,f)) ]
onlyfiles_B = [ f for f in listdir(DIR_B) if isfile(join(DIR_B,f)) ]
for f_a in onlyfiles_A:
if not f_a in onlyfiles_B:
src = DIR_A+"/"+f_a
shutil.copy(src, DIR_B)
从操作系统导入listdir
从os.path导入isfile,加入
DIR_A=“”
DIR_B=“”
onlyfiles_A=[f代表listdir(DIR_A)中的f,如果isfile(join(DIR_A,f))]
onlyfiles_B=[f代表listdir(DIR_B)中的f,如果isfile(join(DIR_B,f))]
对于仅文件中的f_a:
如果仅文件B中没有f_a:
src=DIR_A+“/”+f_A
文件副本(src,目录B)
有关详细信息,请浏览此链接:
也许你可以做下一步:
import glob
import shutil
src = "/opt/"
dst = "/opt/something/"
files_src = set(glob.glob(src+"*.txt"))
files_dst = set(glob.glob(dst+"*.txt"))
other_files = files_src-files_dst
for _file in other_files:
shutil.copy(src+_file, dst)
我会帮助你,并引导你找到答案(但我不会直接告诉你!) 因此,首先,最基本的文件编辑功能都在
os
模块中,让我们在脚本的顶部导入它:
import os
现在让我们看看如何检查文件是否存在。[一点研究表明,os.path
模块有一个名为exists
的函数,用于检查文件是否存在!]因此,现在我们已经设置好了,但我们必须找出如何获取目录A中的所有文件。看起来os
模块也可以使用listdir
功能实现这一点。如果我们有一个名为“directoryone”的目录,我们可以通过以下方式获取其中的所有文件/目录(然后将它们放入列表中):
[file for file in os.listdir("directoryone")]
但我们只想获取文件,因此必须添加if
语句以缩小列表范围:
[file for file in os.listdir("directoryone") if os.path.isfile(os.path.join("directoryone", f))]
现在我们有了一个语句,它获取目录中的所有文件,我们有了一种检查文件是否存在的方法。我们需要做的最后一件事是弄清楚如何复制文件。为此,我们必须导入shutil
型号:
import shutil
然后我们可以使用shutil.copy
功能,如下所示:
shutil.copy(srcfile, dstdir)
因此,我们将以以下代码结束:
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)
如果只想复制扩展名为*.txt的文件,可以执行以下操作:
#!/usr/bin/python
import glob
import os
import shutil
dira = 'path-to-dira'
dirb = 'path-to-dirb'
for filename in glob.glob(os.path.join(dira,'*.txt')):
print os.path.join(dirb,os.path.basename(filename))
if not os.path.isfile(os.path.join(dirb,os.path.basename(filename))):
shutil.copy(filename,dirb)
如果要将所有文件替换为
'*.txt'
“*”,请在原始目录中创建一个for循环,然后使用该循环确定文件是否已存在。如果它不复制文件。只需差异<如果b_文件
中有任何额外文件,则code>symmetric_difference
将导致问题。例如,set(a\u文件)。difference(b\u文件)
谢谢你的分解。解决了我的问题,教了我方法。再次感谢。感谢添加“*.txt”,很高兴知道!
#!/usr/bin/python
import glob
import os
import shutil
dira = 'path-to-dira'
dirb = 'path-to-dirb'
for filename in glob.glob(os.path.join(dira,'*.txt')):
print os.path.join(dirb,os.path.basename(filename))
if not os.path.isfile(os.path.join(dirb,os.path.basename(filename))):
shutil.copy(filename,dirb)