从列表Python复制文件

时间:2013-04-29 20:33:23

标签: python wxpython cp shutil

我正在制作一个小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程序,我几乎就在那里!

由于 加文

3 个答案:

答案 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!'