从列表Python复制文件

2024-09-30 03:24:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个小python程序来复制一些文件。我的文件名在列表“selectedList”中。在

用户已选择源目录“self.DirFilename“和目的地方向”最肮脏的". 在

我用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程序,我就快到了!在

谢谢 加文


Tags: 文件用户self程序src列表文件名dir
3条回答
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)

有关递归副本的纯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, ...)

我想这样的东西能起作用。当然,你可能想用一些东西来推进操作系统打电话给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!'

相关问题 更多 >

    热门问题