Last active 1670065451

Steven Smith revised this gist 1497964859. Go to revision

1 file changed, 12 insertions, 5 deletions

checksummer.py

@@ -9,22 +9,29 @@ def crc32_file(filename):
9 9 return hex(zlib.crc32(f.read())).upper()[2:].zfill(8)
10 10
11 11 def get_files_recursively(directory="."):
12 - for root, dirs, files in os.walk(directory):
12 + for root, dirs, files in os.walk(os.path.abspath(directory)):
13 13 for name in files:
14 14 yield os.path.join(root, name)
15 15
16 16 def add_crc_to_fn(filename):
17 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)
18 + try:
19 + os.rename(filename, new_name)
20 + print("{} >> {}".format(filename, new_name), file=sys.stderr)
21 + except (OSError, IOError) as e:
22 + print("{} Unable to rename {}".format(e.__class__.__name__, filename))
20 23
21 24 def add_crc_to_sfv(filename):
22 25 crc = crc32_file(filename)
23 26 dirname = os.path.dirname(filename)
24 27 line = "{} {}\n".format(os.path.basename(filename), crc)
25 28 sfv_path = os.path.join(dirname, os.path.basename(dirname) + ".sfv")
26 - with open(sfv_path, "a") as f:
27 - f.write(line)
29 + try:
30 + with open(sfv_path, "a") as f:
31 + f.write(line)
32 + print("{} >> {}".format(filename, crc))
33 + except (OSError, IOError) as e:
34 + print("{} Unable to create {}".format(e.__class__.__name__, sfv_path))
28 35
29 36 if __name__ == "__main__":
30 37 parser = argparse.ArgumentParser()

Steven Smith revised this gist 1497964184. Go to revision

1 file changed, 38 insertions

checksummer.py(file created)

@@ -0,0 +1,38 @@
1 + #!/usr/bin/env python3
2 + import zlib
3 + import os
4 + import sys
5 + import argparse
6 +
7 + def crc32_file(filename):
8 + with open(filename, "rb") as f:
9 + return hex(zlib.crc32(f.read())).upper()[2:].zfill(8)
10 +
11 + def 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 +
16 + def 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 +
21 + def 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 +
29 + if __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)
Newer Older