Pythonで大きなファイルをコピーする際、進行状況を表示することは非常に便利です。以下に、進行状況バー付きでファイルをコピーする方法を示します。
まず、進行状況バーを表示するためのクラスを作成します。このクラスは、進行状況を表示するためのシンボルと、進行状況バーの幅を管理します。
class ProgressBar:
def __init__(self, width=20, progress_symbol='▣', empty_symbol='□'):
self.width = width
self.progress_symbol = progress_symbol
self.empty_symbol = empty_symbol
self.progress = 0
def update(self, progress):
self.progress = progress
filled_blocks = int(round(progress / (100 / float(self.width))))
empty_blocks = self.width - filled_blocks
progress_bar = self.progress_symbol * filled_blocks + self.empty_symbol * empty_blocks
print('\r{0} {1}%'.format(progress_bar, progress), end='')
次に、このProgressBar
クラスを使用して、進行状況バー付きでファイルをコピーする関数を作成します。
import shutil
def copy_with_progress(src, dest, callback=None):
with open(src, 'rb') as fsrc, open(dest, 'wb') as fdst:
total = os.path.getsize(src)
pb = ProgressBar()
while True:
buf = fsrc.read(1024*1024) # Adjust to your needs.
if not buf:
break
fdst.write(buf)
progress = fsrc.tell() * 100 / total
pb.update(progress)
この関数は、ソースファイルを開き、目的地のファイルに書き込みます。各ループの後で、進行状況バーを更新します。
以上がPythonで進行状況バー付きのファイルコピーを行う方法です。大きなファイルを扱う際には、このような進行状況バーが非常に便利です。