链接:求根据记事本提供的内容,自动更名的软件 - 吾爱破解 - 52pojie.cn
其实求助者提供的网盘内的书表是一个CSV文件,如果用CSV格式就不会出现书名中逗号分隔的错误了
代码分5个部分:
main()方法主要是获取目录信息并调用相关方法进行处理
processing_data() 方法主要是对文本文件的内容进行处理
rename_files()方法为改名的方法
filter_special_symbol()方法主要处理文件名有特殊符号报错。
create_files()方法为创建一批文件进行测试
直接上代码:
"""
Date:2024/11/5 16:29
File : readTxtFile.py
"""
import os.path
import re
def filter_special_symbol(file):
"""
把不能作为文件名的特殊符号替换成下划线
:param file: 待判断文件名
:return: 不包含不能作为文件名的特殊符号的文件名
"""
r_str = r"[\/\\\:\*\?\"\\|]" # '/ \ : * ? " |'
new_title = re.sub(r_str, "_", file) # 替换为下划线
return new_title
def create_files(item, root_path):
"""
创建一批文件
:param item: 包含文件名的字典
:param root_path: 创建路径
:return: None
"""
if not os.path.exists(root_path):
os.mkdir(root_path)
for i in item.keys():
with open(fr"{root_path}\{i}.txt", 'w', encoding='utf-8') as f:
f.write(item)
def processing_data(file_path):
"""
对书表进行处理
:param file_path: 书表的目录
:return: 返回一个key为原文件名 value为新文件名 的字典
"""
item = {}
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
try:
if line.split(",")[3].isdigit():
item[line.split(",")[3]] = f"2024_{line.split(",")[2]}_{line.split(",")[4]}"
else:
item[line.split(",")[4]] = f"2024_{line.split(",")[2]},{line.split(",")[3]}_{line.split(",")[5]}"
except Exception as e:
print(f"{line.strip()} ---> {e}")
return item
def rename_files(item, root_path):
"""
重命名模块
:param item: key为原文件名 value为新文件名 的字典
:param root_path: 文件的所在目录
:return: None
"""
for file in os.listdir(root_path):
file_key = os.path.splitext(file)[0]
if not file_key.isdigit():
continue
src_file_path = os.path.join(root_path, file)
src_file_name = os.path.splitext(file)[0]
new_file_name = filter_special_symbol(item.get(file_key))
new_file_path = src_file_path.replace(src_file_name, new_file_name)
if new_file_name:
try:
os.rename(src_file_path, new_file_path)
except Exception as e:
print(e)
else:
print(f"出错~~~{file}")
def main():
"""
启动
:file_path 书表文件路径
:root_folder 待改名文件目录
:return: None
"""
file_path = input("请输入书表的文件路径:")
root_folder = input("请输入待改名的目录:")
if os.path.exists(root_folder) and os.path.exists(file_path):
# 获取文件的目录
# print(root_folder)
# 处理数据
res = processing_data(file_path)
# print(len(res), res)
# 创建一批文件
# create_files(res, root_folder)
# 重命名文件
rename_files(res, root_folder)
if __name__ == '__main__':
main()