ファイル操作のためのshutil
ファイルをコピー、移動、アーカイブします
「ファイル操作のためのshutil」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
shutilとは
shutil(shell utilities)モジュールは、ファイルのコピーや移動、ディレクトリツリーの削除、アーカイブの作成といった高水準のファイル操作を提供します。日常的な処理ではosを基盤として利用します。
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/a.txt', 'w') as f:
f.write('hello')
print('created a.txt')ファイルのコピー
shutil.copy(src, dst)は、ファイルの内容とアクセス権ビットを新しい場所にコピーします。
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/src.txt', 'w') as f:
f.write('data')
shutil.copy('/tmp/shutil_demo/src.txt', '/tmp/shutil_demo/copy.txt')
print(os.path.exists('/tmp/shutil_demo/copy.txt'))copyとcopy2の違い
shutil.copy2はcopyと同様に動作しますが、タイムスタンプなどのメタデータも保持します。変更時刻が重要な場合に使用します。
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/m.txt', 'w') as f:
f.write('x')
shutil.copy2('/tmp/shutil_demo/m.txt', '/tmp/shutil_demo/m2.txt')
print('copied with metadata')ディレクトリツリー全体のコピー
shutil.copytree(src, dst)は、ディレクトリ全体を再帰的にコピーします。dirs_exist_ok=Trueを渡さない限り、コピー先はすでに存在していてはいけません。
import shutil, os
os.makedirs('/tmp/tree_src/sub', exist_ok=True)
with open('/tmp/tree_src/sub/f.txt', 'w') as f:
f.write('hi')
shutil.rmtree('/tmp/tree_dst', ignore_errors=True)
shutil.copytree('/tmp/tree_src', '/tmp/tree_dst')
print(os.path.exists('/tmp/tree_dst/sub/f.txt'))ファイルとフォルダーの移動
shutil.move(src, dst)は、ファイルまたはディレクトリを移動(または名前変更)します。os.renameでは失敗するファイルシステム間の移動にも対応しています。
import shutil, os
os.makedirs('/tmp/move_demo', exist_ok=True)
with open('/tmp/move_demo/old.txt', 'w') as f:
f.write('move me')
shutil.move('/tmp/move_demo/old.txt', '/tmp/move_demo/new.txt')
print(os.path.exists('/tmp/move_demo/new.txt'))ディレクトリツリーの削除
shutil.rmtree(path)は、ディレクトリとその中にあるすべてのものを削除します。元に戻せないため、慎重に使用してください。
import shutil, os
os.makedirs('/tmp/to_delete/inner', exist_ok=True)
shutil.rmtree('/tmp/to_delete')
print('exists after rmtree:', os.path.exists('/tmp/to_delete'))ignore_errorsと安全性
rmtreeにignore_errors=Trueを渡すと、パスが存在しない場合でもクラッシュを避けられます。新しく実行する前のクリーンアップに便利です。
import shutil
shutil.rmtree('/tmp/never_existed', ignore_errors=True)
print('no error even though path was absent')アーカイブの作成
shutil.make_archive(base_name, format, root_dir)は、1回の呼び出しでディレクトリをzipまたはtarファイルにまとめます。
import shutil, os
os.makedirs('/tmp/arch_src', exist_ok=True)
with open('/tmp/arch_src/data.txt', 'w') as f:
f.write('archive me')
path = shutil.make_archive('/tmp/my_archive', 'zip', '/tmp/arch_src')
print('created', os.path.basename(path))アーカイブの展開
shutil.unpack_archive(filename, extract_dir)はその逆の処理を行い、zipまたはtarをフォルダーに展開します。
import shutil, os
shutil.make_archive('/tmp/box', 'zip', '/tmp/arch_src')
shutil.unpack_archive('/tmp/box.zip', '/tmp/unpacked')
print(os.listdir('/tmp/unpacked'))実行可能ファイルの検索
shutil.which(name)は、シェルのwhichコマンドと同様に、システムのPATH上にあるプログラムを検索します。完全なパスまたはNoneを返します。
import shutil
print(shutil.which('python3'))
print(shutil.which('definitely_not_a_real_program'))ディスク使用量
shutil.disk_usage(path)は、指定したパスを含むファイルシステムの合計バイト数、使用済みバイト数、空きバイト数を返します。
import shutil
usage = shutil.disk_usage('/')
print('total GB:', round(usage.total / 1e9, 1))
print('free GB:', round(usage.free / 1e9, 1))理解度チェック
shutilについての理解度を確認しましょう。
まとめ
ファイル操作のためのshutilについて学びました。
copy/copy2はファイルをコピーし、copytreeはツリー全体をコピーします。moveは名前を変更または移動し、rmtreeはツリーを削除します。make_archive/unpack_archiveはzipとtarを処理します。whichとdisk_usageはシステム情報を取得します。
次のコースでは、argparseを使ったコマンドラインツールの構築について学びます。
よくある質問
「ファイル操作のためのshutil」レッスンは無料ですか?
はい。「ファイル操作のためのshutil」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「ファイル操作のためのshutil」で何を学びますか?
ファイルをコピー、移動、アーカイブします ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ファイル操作のためのshutil」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- subprocessによるコマンド実行
- 出力の取得
- 環境とosモジュール
- ファイル操作のためのshutil