From 5e7c177afffea003bda3d3e7b9d2eb8d6dd2edd8 Mon Sep 17 00:00:00 2001 From: 100gle <569590461@qq.com> Date: Thu, 12 May 2022 13:14:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9EVol08=E7=AB=A0?= =?UTF-8?q?=E8=8A=82=E7=A4=BA=E4=BE=8B=E6=BA=90=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/08/backup/foo/bar.gz | 0 code/08/backup/foo/bee.zip | 0 code/08/backup/hello.py | 0 code/08/backup/main.go | 0 code/08/backup/package.json | 0 code/08/backup/usage.py | 0 code/08/main.py | 104 ++++++++++++++++++++++++++++++++++ code/08/testdata/foo/bar.gz | 0 code/08/testdata/foo/bee.zip | 0 code/08/testdata/hello.py | 0 code/08/testdata/main.go | 0 code/08/testdata/package.json | 0 code/08/testdata/usage.py | 0 13 files changed, 104 insertions(+) create mode 100644 code/08/backup/foo/bar.gz create mode 100644 code/08/backup/foo/bee.zip create mode 100644 code/08/backup/hello.py create mode 100644 code/08/backup/main.go create mode 100644 code/08/backup/package.json create mode 100644 code/08/backup/usage.py create mode 100644 code/08/main.py create mode 100644 code/08/testdata/foo/bar.gz create mode 100644 code/08/testdata/foo/bee.zip create mode 100644 code/08/testdata/hello.py create mode 100644 code/08/testdata/main.go create mode 100644 code/08/testdata/package.json create mode 100644 code/08/testdata/usage.py diff --git a/code/08/backup/foo/bar.gz b/code/08/backup/foo/bar.gz new file mode 100644 index 0000000..e69de29 diff --git a/code/08/backup/foo/bee.zip b/code/08/backup/foo/bee.zip new file mode 100644 index 0000000..e69de29 diff --git a/code/08/backup/hello.py b/code/08/backup/hello.py new file mode 100644 index 0000000..e69de29 diff --git a/code/08/backup/main.go b/code/08/backup/main.go new file mode 100644 index 0000000..e69de29 diff --git a/code/08/backup/package.json b/code/08/backup/package.json new file mode 100644 index 0000000..e69de29 diff --git a/code/08/backup/usage.py b/code/08/backup/usage.py new file mode 100644 index 0000000..e69de29 diff --git a/code/08/main.py b/code/08/main.py new file mode 100644 index 0000000..18e348b --- /dev/null +++ b/code/08/main.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 + +import pathlib + +CURRENT_DIR = pathlib.Path(__file__).parent +ARCHIVE_DIR = CURRENT_DIR.joinpath("archive") +IGNORES = { + ".idea/**", + "*.xml", + "*.iml", + ".vscode/*", + ".vscode/**/*", + "backup/*", + "backup/**/*", + __file__, +} + + +def filter_ignores(files): + keep = [] + + for file in files: + matched = any( + [file.match(ignore) or file.name.startswith(".") for ignore in IGNORES] + ) + if not matched: + keep.append(file) + else: + print(f"[WARNING] ignore file: {file}") + + return keep + + +def seek_files(path, recursive=False, ignore=True): + files = [] + + for file in path.iterdir(): + if file.is_file(): + files.append(file) + elif recursive and file.is_dir(): + files.extend(seek_files(file, recursive)) + + if ignore: + files = filter_ignores(files) + + return files + + +def extract_suffixes(files): + suffixes = set() + for file in files: + suffix = file.suffix + if not suffix: + continue + + suffix = suffix.replace(".", "") + suffixes.add(suffix) + + return suffixes + + +def groupby(files, suffixes): + group = {} + for file in files: + suffix = file.suffix.replace(".", "") + if suffix in suffixes: + group.setdefault(suffix, []).append(file) + else: + continue + + return group + + +def classify(files, verbose=False): + suffixes = extract_suffixes(files) + grouper = groupby(files, suffixes) + + if not grouper.keys(): + return + + for suffix, fs in grouper.items(): + directory = ARCHIVE_DIR.joinpath(suffix) + directory.mkdir(parents=True, exist_ok=True) + if verbose: + print(f"[INFO ] handle .{suffix} files:") + + for file in fs: + dest = directory.joinpath(file.name) + file.rename(dest) + if verbose: + print(f" change {file} -> {dest}") + + +def main(): + + path = CURRENT_DIR / "testdata" + print(f"Use current directory: {path}") + + files = seek_files(path, recursive=True) + classify(files, verbose=True) + + +if __name__ == "__main__": + main() diff --git a/code/08/testdata/foo/bar.gz b/code/08/testdata/foo/bar.gz new file mode 100644 index 0000000..e69de29 diff --git a/code/08/testdata/foo/bee.zip b/code/08/testdata/foo/bee.zip new file mode 100644 index 0000000..e69de29 diff --git a/code/08/testdata/hello.py b/code/08/testdata/hello.py new file mode 100644 index 0000000..e69de29 diff --git a/code/08/testdata/main.go b/code/08/testdata/main.go new file mode 100644 index 0000000..e69de29 diff --git a/code/08/testdata/package.json b/code/08/testdata/package.json new file mode 100644 index 0000000..e69de29 diff --git a/code/08/testdata/usage.py b/code/08/testdata/usage.py new file mode 100644 index 0000000..e69de29