フォルダー内のファイル一覧をCSVで作成する
サブフォルダーを走査し、ファイルパス、拡張子、サイズ、更新日時を表として記録します。元のファイルと既存の結果をそのまま保持したまま、まず4つの小さなサンプルファイルで確認します。
ファイル名やサイズだけに頼らず、ファイルの bytes の hash を比較してコピー結果を確認します。
この翻訳はAIで作成しました。コード、単位、数値は原文と併せて確認してください。各言語のネイティブ話者による校閲は、まだ完了していません。 English
対象読者コピーした文書の内容が元ファイルと同じか確認したい Python 初学者
files は、names と sizes が同じでも contents が異なる場合があります。SHA-256 は file bytes を読み取り、64文字の hexadecimal (base 16) string を計算します。同じ bytes からは同じ hash が得られるため、コピー前後の files を確認するために使用できます。
この演習では、2つの files の hash が同じかどうかを report に記録します。files を削除したり置き換えたりはしません。hash が一致しても、その file を誰が作成したか、official distribution かどうか、malware が含まれていないかまでは証明できません。
original.txt と copy.txt には同じ1行の合成文が含まれています。example.py は自身の場所を基準に両方の files を探して読み取ります。terminal の current folder が異なっていても input paths は変わりません。
Worknote synthetic file comparison sample.画面上で text が同じに見えても、line endings, character encoding, trailing spaces の違いによって bytes と hashes が異なることがあります。files は text を整えたり spaces を削除したりせず、そのまま比較します。
python example.py新しい outputs folder と comparison.json file が作成されます。console value の same_sha256=true は、付属の2 files の hashes が一致したことを意味します。outputs がすでに存在する場合、program は上書きせず停止します。例をもう一度実行するには、別の folder に新しい copy を展開してください。
| Key | 意味 |
|---|---|
| algorithm | 使用した hash algorithm: SHA-256 |
| files | 比較した2つの file names |
| sha256 | 各 file の64文字の hash string |
| same_sha256 | 2つの hashes が一致すれば true、一致しなければ false |
file names と hashes は同じ順序で表示されます。付属例の想定結果は true です。report file が作成されたことと、comparison result が true であることは別なので、値そのものを確認してください。
digest function は file を binary read mode で開き、1 MiB ずつ読みながら hash state を更新します。file 全体を一度に memory に読み込むことはありません。results folder は、両方の input files を最後まで読み取った後にだけ作成されます。
"""Compare two local synthetic files without changing them."""
import hashlib
import json
from pathlib import Path
BASE = Path(__file__).resolve().parent
def digest(path):
value = hashlib.sha256()
with path.open('rb') as stream:
for chunk in iter(lambda: stream.read(1024 * 1024), b''):
value.update(chunk)
return value.hexdigest()
def main():
output = BASE / 'outputs'
if output.exists():
raise ValueError('outputs already exists; choose a fresh extraction folder.')
left, right = BASE / 'original.txt', BASE / 'copy.txt'
hashes = [digest(left), digest(right)]
result = {'algorithm': 'SHA-256', 'files': [left.name, right.name],
'sha256': hashes, 'same_sha256': hashes[0] == hashes[1]}
output.mkdir(exist_ok=False)
with (output / 'comparison.json').open('x', encoding='utf-8') as stream:
json.dump(result, stream, indent=2)
stream.write('\n')
print('same_sha256=' + str(result['same_sha256']).lower())
print('Created outputs/comparison.json')
if __name__ == '__main__':
try:
main()
except (OSError, ValueError) as error:
raise SystemExit(f'Stopped: {error}') from error
character count が同じままでも、1 byte の変更によって hash comparison で違いを検出できます。このコードは mismatch の原因が corruption なのか intentional editing なのかまでは判断しません。
file が見つからない、または読み取れない場合、program は Stopped message を表示して終了します。archive 全体を展開したことと、file names が正しいことを確認してください。existing outputs folder が原因の場合は、別の folder に新しく展開してそこで実行します。
disk write error が発生した場合、新しい outputs folder に不完全な report が残ることがあります。completion message と JSON contents の両方を確認するまでは results を使用しないでください。
cryptographic hashes にも理論上 collision の可能性があるため、これは数学的に完全な identity proof とは説明しません。この例は日常的な copy check 用の小さな tool です。official download の authenticity を検証するには、trusted distributor が提供した hash または signature と比較する別の手順が必要です。
読み取り中に files が変更される場合、network drive failures, access permissions, large files での performance には別の確認が必要です。コードは input files の snapshots を作成したり lock したりしません。
2026-09-19 · Windows 11 · CPython 3.12.14 · 標準ライブラリ
コード、入力データ、実行手順が含まれています。展開して、まずREADME.txtを読んでください。
サンプルZIPをダウンロードサンプルコード、ファイル名、入力キーは原文のままです。翻訳本文のコマンドと確認手順も併せて参照してください。
独自に作成した練習用資料 · 元のファイルを別に保管してから実行してください。
説明と例は独自に作成しました。関連する動作や概念は、以下の公式資料で確認できます。