feat: 新增Vol08章节示例源码
This commit is contained in:
0
code/08/backup/foo/bar.gz
Normal file
0
code/08/backup/foo/bar.gz
Normal file
0
code/08/backup/foo/bee.zip
Normal file
0
code/08/backup/foo/bee.zip
Normal file
0
code/08/backup/hello.py
Normal file
0
code/08/backup/hello.py
Normal file
0
code/08/backup/main.go
Normal file
0
code/08/backup/main.go
Normal file
0
code/08/backup/package.json
Normal file
0
code/08/backup/package.json
Normal file
0
code/08/backup/usage.py
Normal file
0
code/08/backup/usage.py
Normal file
104
code/08/main.py
Normal file
104
code/08/main.py
Normal file
@@ -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()
|
||||
0
code/08/testdata/foo/bar.gz
vendored
Normal file
0
code/08/testdata/foo/bar.gz
vendored
Normal file
0
code/08/testdata/foo/bee.zip
vendored
Normal file
0
code/08/testdata/foo/bee.zip
vendored
Normal file
0
code/08/testdata/hello.py
vendored
Normal file
0
code/08/testdata/hello.py
vendored
Normal file
0
code/08/testdata/main.go
vendored
Normal file
0
code/08/testdata/main.go
vendored
Normal file
0
code/08/testdata/package.json
vendored
Normal file
0
code/08/testdata/package.json
vendored
Normal file
0
code/08/testdata/usage.py
vendored
Normal file
0
code/08/testdata/usage.py
vendored
Normal file
Reference in New Issue
Block a user