Last active 1670065451

Revision e442a7e0014ca314ccd4c49b2ce5338b3356ec52

checksummer.py Raw
1#!/usr/bin/env python3
2import zlib
3import os
4import sys
5import argparse
6
7def crc32_file(filename):
8 with open(filename, "rb") as f:
9 return hex(zlib.crc32(f.read())).upper()[2:].zfill(8)
10
11def get_files_recursively(directory="."):
12 for root, dirs, files in os.walk(directory):
13 for name in files:
14 yield os.path.join(root, name)
15
16def add_crc_to_fn(filename):
17 new_name = "{0} [{2}]{1}".format(*os.path.splitext(filename), crc32_file(filename))
18 print("{} >> {}".format(filename, new_name))
19 os.rename(filename, new_name)
20
21def add_crc_to_sfv(filename):
22 crc = crc32_file(filename)
23 dirname = os.path.dirname(filename)
24 line = "{} {}\n".format(os.path.basename(filename), crc)
25 sfv_path = os.path.join(dirname, os.path.basename(dirname) + ".sfv")
26 with open(sfv_path, "a") as f:
27 f.write(line)
28
29if __name__ == "__main__":
30 parser = argparse.ArgumentParser()
31 parser.add_argument("--directory", default=".")
32 parser.add_argument("--filename", help="Writes checksum into filename", action="store_true")
33 args = parser.parse_args()
34 for filename in get_files_recursively(directory=args.directory):
35 if args.filename:
36 add_crc_to_fn(filename)
37 else:
38 add_crc_to_sfv(filename)