luxingyu329 发表于 2024-11-5 17:04

根据记事本提供的内容,自动更改文件名

网友求助帖子:**根据记事本提供的内容,自动更改文件名**

链接:[求根据记事本提供的内容,自动更名的软件 - 吾爱破解 - 52pojie.cn](https://www.52pojie.cn/thread-1978300-1-1.html)

其实求助者提供的网盘内的书表是一个CSV文件,如果用CSV格式就不会出现书名中逗号分隔的错误了

代码分5个部分:

main()方法主要是获取目录信息并调用相关方法进行处理

processing_data() 方法主要是对文本文件的内容进行处理

rename_files()方法为改名的方法

filter_special_symbol()方法主要处理文件名有特殊符号报错。

create_files()方法为创建一批文件进行测试

直接上代码:

```python
"""
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(",").isdigit():
                  item] = f"2024_{line.split(",")}_{line.split(",")}"
                else:
                  item] = f"2024_{line.split(",")},{line.split(",")}_{line.split(",")}"
            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)
      if not file_key.isdigit():
            continue
      src_file_path = os.path.join(root_path, file)
      src_file_name = os.path.splitext(file)
      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()
```

dork 发表于 2024-11-6 08:48

for line in f:也仅仅是用第一行当作文件名,本以为是AI自动提炼出文章内容为文件名。。。。。。

wkdxz 发表于 2024-11-6 09:20

看这种优雅的代码是种享受!{:1_921:}

laotzudao0 发表于 2024-11-6 10:42

我还以为是ai提取内容自动生成{:301_993:}

WHANHAO003 发表于 2024-11-7 08:42

看不懂我还以为是ai提取内容自动生成
页: [1]
查看完整版本: 根据记事本提供的内容,自动更改文件名