问题描述
|
我之前曾在这里询问过有关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
创建新目录。但是,您确定由于进度条而不是其他原因导致它运行缓慢吗?