我在Windows计算机上使用Python 2.7。 我想知道我的转移的比特率如何复制。 我有一个源列表和一个目的地列表,并在for循环中调用它们。 实际副本由以下代码完成。
subprocess.call(""" copy "%s" "%s" """ % (src_abs_path, dst_abs_path), shell=True)
有没有办法让我的副本速度快?
由于 加文
答案 0 :(得分:0)
除非copy
命令通过stdout提供有关比特率的反馈,否则您将需要一个外部python库来为您执行此操作或者您通过每秒检查新文件的大小来手动执行它并进行一些数学运算
答案 1 :(得分:0)
你可以沿着这些方向做点什么:
#!/usr/bin/python
import sys
import os
import glob
class ProgBar(object):
def __init__(self, **kwargs):
self.length=kwargs.get('width', 40)
self.header=kwargs.get('header', None)
self.progress=0.0
self.fmt=kwargs.get('fmt', "[{}] {:6.1%}")
def start(self, prog=0.0):
self.progress=prog
if self.header:
sys.stdout.write(self.header)
return self
def update(self, prog):
sys.stdout.write('\r')
if prog>1 or prog<0: raise ValueError('progress outside range')
self.progress=prog
block=int(round(self.length*prog))
txt=self.fmt.format("#"*block + "-"*(self.length-block), prog)
self.outlen=len(txt)
sys.stdout.write(txt)
sys.stdout.flush()
def read_in_chunks(infile, chunk_size=1024):
while True:
chunk = infile.read(chunk_size)
if chunk:
yield chunk
else:
return
src_path='/tmp'
dest_path='/tmp/test_dir/1/2/3/4/5'
buf=10 # artificially small...
os.chdir(src_path)
for file in glob.glob('*.txt'):
src=os.path.join(src_path,file)
dst=os.path.join(dest_path,file)
src_size=os.path.getsize(file)
with open(src, 'rb') as fin, open(dst, 'w') as fout:
pb=ProgBar().start()
print '{}\n=>\n{}'.format(src,dst)
for i, chunk in enumerate(read_in_chunks(fin, buf), 1):
fout.write(chunk)
pb.update(float(i)*buf/src_size)
print '\ndone'