我是使用Spyder 2.3.0和Python 3.4.1的新手
我有一个带子目录的目录结构。
与Web上的其他示例不同,我想选择多种文件类型并复制目录结构。我在下面尝试了它可以工作,但它一次只需要一种文件类型,并且“copytree
”是“(它会非常慢)。
是否有一种方法或方法可以简化此操作以使其更快?
我想我想做的是:
制作文件类型和位置的完整列表(遍历目录结构)
例如以
结尾fileExt = [".txt", ".doc", ".docx", ".xls",".xlsx", ".ppt", ".pptx", ".m", ".xmcd", ".pdf " ]
然后使用该列表只需“shutil.copytree
”
任何建议都非常感谢。
srcDir = 'c:/a/src/dir/'
dirName = 'c:/a/dest/dir/'
import os
import shutil
##################################################################################
dstDir = os.path.abspath(dirName)
def ignore_list(path, files):
filesToIgnore = []
for fileName in files:
fullFileName = os.path.join(os.path.normpath(path), fileName)
if not os.path.isdir(fullFileName) and not fileName.endswith('.txt') :
filesToIgnore.append(fileName)
return filesToIgnore
# start of script
shutil.copytree(srcDir, dstDir, ignore=ignore_list)
####################################################################################################################################################################
dstDir = os.path.abspath(dirName)
def ignore_list(path, files):
filesToIgnore = []
for fileName in files:
fullFileName = os.path.join(os.path.normpath(path), fileName)
if not os.path.isdir(fullFileName) and not fileName.endswith('.docx') :
filesToIgnore.append(fileName)
return filesToIgnore
# start of script
shutil.copytree(srcDir, dstDir, ignore=ignore_list)
####################################################
复制并粘贴更改“endswith(' .docx'):”
答案 0 :(得分:0)
我们可以更多地执行你的“ignore_list”方法
valid_formats = ["txt", "doc", "docx", "xls","xlsx", "ppt", "pptx", "m", "xmcd", "pdf "]
import timeit
import os.path as op
def ignore_list(path, files):
dag_path = [op.join(op.normpath(path), f) for f in files]
return [ff for ff in dag_path if not op.isdir(ff) and ff.split(".")[-1] not in valid_formats]
start = timeit.default_timer()
ignore = ignore_list(path, files)
print ("Time: {0}".format(str(timeit.default_timer()-start)))
答案 1 :(得分:0)
这很有效,我知道它不漂亮但是有效
srcDir = 'c:/a/src/dir/
dstDir = 'c:/a/dest/dir/'
A01= '.doc'
A02= '.docx'
A03= '.xls'
A04= '.xlsx'
A05= '.ppt'
A06= '.pptx'
A07= '.m'
A08= '.xmcd'
A09= '.inp'
A10= '.pdf'
A11= '.DOC'
A12= '.DOCX'
A13= '.XLS'
A14= '.XLSX'
A15= '.PPT'
A16= '.PPTX'
A17= '.M'
A18= '.XMCD'
A19= '.INP'
A20= '.PDF'
import os
import shutil
#########################################################################################################
def ignore_list(path, files):
filesToIgnore = []
for fileName in files:
fullFileName = os.path.join(os.path.normpath(path), fileName)
if not os.path.isdir(fullFileName) and not fileName.endswith(A01) and not fileName.endswith(A02) and not fileName.endswith(A03) and not fileName.endswith(A04) and not fileName.endswith(A05) and not fileName.endswith(A06) and not fileName.endswith(A07) and not fileName.endswith(A08) and not fileName.endswith(A09) and not fileName.endswith(A10) and not fileName.endswith(A11) and not fileName.endswith(A12) and not fileName.endswith(A13) and not fileName.endswith(A14) and not fileName.endswith(A15) and not fileName.endswith(A16) and not fileName.endswith(A17) and not fileName.endswith(A18) and not fileName.endswith(A19) and not fileName.endswith(A20) :
filesToIgnore.append(fileName)
return filesToIgnore
shutil.copytree(srcDir, dstDir, ignore=ignore_list)
#########################################################################################################