首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随进度递归地复制文件

问随进度递归地复制文件
EN

Stack Overflow用户
提问于 2011-05-23 08:15:55
回答 1查看 2.1K关注 0票数 1

我以前在这里看到过关于Python和复制文件的问题,但是我有一个不同的场景要处理。

我的Linux发行版安装程序已经完成了,现在它所需要做的就是将文件复制到目标分区。由于大多数发行版安装程序都有一个进度条,所以我也希望添加一个。

现在,我正在使用PyQt4,我的代码如下所示:

代码语言:javascript
复制
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,脚本需要很长时间才能复制完文件。比简单的cp -r长得多。

有什么有效的方法吗?对于单文件复制进度条,您所做的只是一次读取小块,但我不知道如何对带有91,489文件的目录这样做。

任何帮助都会有帮助。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-23 08:19:19

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6094534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档