Files
stock/scripts/aabook/tools_dir.py
2024-11-15 15:06:34 +08:00

66 lines
2.2 KiB
Python

import os
import shutil
import argparse
import re
def flatten_directory(source_dir):
"""
将指定目录下的所有txt文件移动到当前目录并重命名
Args:
source_dir: 源目录
"""
for root, dirs, files in os.walk(source_dir):
for file in files:
if file.endswith('.txt'):
src_file = os.path.join(root, file)
dst_file = os.path.join(source_dir, f"[{os.path.basename(root)}]_{file}")
print(f'move {src_file} {dst_file}')
shutil.move(src_file, dst_file)
def unflatten_directory(source_dir):
"""
将当前目录下的txt文件按照文件名中的目录信息进行分类
Args:
source_dir: 源目录
"""
for file in os.listdir(source_dir):
if file.endswith('.txt'):
#dir_name, filename = file.split(']', 1)[0][1:], file.split(']', 1)[1][1:]
# 方法二:使用正则表达式
match = re.match(r"\[(.*)]_(.*)", file)
if match:
dir_name, filename = match.groups()
dst_dir = os.path.join(source_dir, dir_name)
dst_file = os.path.join(dst_dir, filename)
src_file = os.path.join(source_dir, file)
# 创建目标目录
os.makedirs(dst_dir, exist_ok=True)
# 移动文件
print(f'move {src_file} {dst_file}')
shutil.move(src_file, dst_file)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Flatten or unflatten a directory of txt files')
parser.add_argument('-f', '--flatten', action='store_true', help='Flatten the directory')
parser.add_argument('-u', '--unflatten', action='store_true', help='Unflatten the directory')
parser.add_argument('directory', help='The directory to process')
args = parser.parse_args()
if args.flatten and args.unflatten:
print("Please choose either --flatten or --unflatten, not both.")
exit(1)
if args.flatten:
flatten_directory(args.directory)
elif args.unflatten:
unflatten_directory(args.directory)
else:
print("Please specify either --flatten or --unflatten.")
exit(1)