0

我正在制作一个小型 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 程序,我快到了!

谢谢加文

4

3 回答 3

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)
于 2013-04-29T20:54:47.127 回答
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, ...)
于 2013-04-29T20:49:40.090 回答
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!'
于 2013-04-29T21:14:48.357 回答