python - 有进度地递归复制文件

标签 python file-io copy progress-bar pyqt4

我之前见过这里提出的有关 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,脚本需要花费非常很长的时间来复制文件。 比简单的 cp -r 长得多

有什么有效的方法可以做到这一点吗?对于单文件复制进度条,您所做的就是一次读取小块,但我不知道如何对包含 91,489 文件的目录执行此操作。

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

最佳答案

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

关于python - 有进度地递归复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094534/

相关文章:

时间:2018-03-08 标签:c++textfileborland

shell - 如何在 macOS 上一行生成并复制 SSH key ?

ant - 使用映射器和文件集将文件复制到另一个子目录中?

java - 复制wav文件

python - 使用 __name__ 作为属性

python - 帮助使用 Python 中的循环链表

python - 我为 2 或 3 个输入编写了代码,但对于许多输入我应该做什么

c++ - 文件 IO 打印到屏幕

java - C++ 有下一行

python - 在 NumPy 中最优雅地实现 MATLAB 的 "vec"函数