我正在制作一个小python程序来复制一些文件。我的文件名位于“selectedList”列表中。
用户已选择源目录“self.DirFilename”和目标目录“self.DirDest”。
我使用的是cp而不是shutil,因为我读过shutil很慢。
继承我的代码:
for i in selectedList:
src_dir = self.DirFilename + "/" + str(i) + ".mov"
dst_dir = self.DirDest
r = os.system('cp -fr %s %s' % (src_dir, dst_dir))
if r != 0:
print 'An error occurred!'**
我希望副本在源目录中搜索给定的文件名,然后在目标中重新创建文件夹结构并复制文件。
任何建议都会有所帮助(就像我正在制作的任何非常明显的错误) - 这是我的第一个python程序,我几乎就在那里!
由于 加文
答案 0 :(得分:0)
有关递归副本的纯Python实现,请参阅http://blogs.blumetech.com/blumetechs-tech-blog/2011/05/faster-python-file-copy.html。
您可以使用os.walk
查找所需的文件:
def find_files(...):
for ... in os.walk(...):
if ...:
yield filename
for name in find_files(...):
copy(name, ...)
答案 1 :(得分:0)
import glob
for fname in selectedList:
filename = str(fname) + '.mov'
found = glob.glob(os.path.join(self.DirFilename, filename))
found.extend(glob.glob(os.path.join(self.DirFilename, '**', filename)))
found = [(p, os.path.join(self.DirDest, os.path.relpath(p, self.DirFilename))) for p in found]
for found_file in found:
# copy files however
#r = os.system('cp -fr %s %s' % found_file)
答案 2 :(得分:0)
我认为这样的事情可以解决问题。当然你可能想要使用os.system调用cp的东西。
import os
for r, d, f in os.walk(self.DirFilename):
for file in f:
f_name, f_ext = os.path.splitext(file)
if ".mov" == f_ext:
if f_name in selectedList:
src_abs_path = os.path.join(r, file)
src_relative_path = os.path.relpath(src_abs_path, self.DirFilename)
dst_abs_path = os.path.join(self.DirDest, src_relative_path)
dst_dir = os.path.dirname(dst_abs_path)
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
ret = os.system('cp -fr %s %s' % (src_abs_path, dst_abs_path))
if ret != 0:
print 'An error occurred!'