递归复制进度文件

问题描述

| 我之前曾在这里询问过有关Python和复制文件的问题,但是我有一个不同的情况要处理。 我使用的Linux发行版安装程序几乎完成了工作,现在要做的就是将文件复制到目标分区。由于大多数发行版安装程序都有进度条,因此我也希望添加一个。 现在,我正在使用PyQt4,我的代码如下所示:
self.status(\'Counting files...\')
self.count = int(check_output([\'-c\',\'find /opt/linux/work/root-image/ -type f | wc -l\'],stderr = PIPE,shell = True))

self.status(\'copying files...\')

i = 0

for root,dirs,files in os.walk(\'/opt/linux/work/root-image/\'):
  for file in files:
    i += 1
    f = os.path.join(root,file)

    try:
      os.system(\'mkdir -p /tmp/foo\' + os.path.split(f)[0])
    except:
      pass

    os.system(\'cp \' + f + \' /tmp/foo\' + f)

    if i % 100 == 0:
      self.emit(SIGNAL(\'progress(int)\'),int(100.0 * float(i) / float(self.count)))

self.status(\'Done...\')
由于进度条,效率很低。整个图像为
2.1GB
,并且脚本需要很长时间才能复制文件。比简单的“ 2”长得多。 有什么有效的方法可以做到这一点吗?对于单文件复制进度条,您要做的只是一次读取很少的块,但是我不知道如何对包含3个文件的目录执行此操作。 任何帮助都会有所帮助。谢谢!     

解决方法

您可以尝试使用
shutil.copy
复制文件,而不是使用
os.system
调用操作系统(这将创建一个单独的进程)。您也可以使用
os.mkdir
创建新目录。但是,您确定由于进度条而不是其他原因导致它运行缓慢吗?