首页 > 其他分享 >(精品)根据文件夹内的txt文本标题处理文件夹MJ数据

(精品)根据文件夹内的txt文本标题处理文件夹MJ数据

时间:2023-12-19 10:59:14浏览次数:31  
标签:文件夹 文件 MJ parts file path txt os

功能介绍

这个脚本是一个自动化的文件重命名工具,专门用于重命名图片文件。其主要功能如下:

  1. 深度遍历指定目录:脚本能够遍历指定目录下的所有子文件夹,进行深度搜索。

  2. 检测文本文件作为命名前缀:对于每个子文件夹,脚本会查找第一个.txt文件,并使用其文件名(不包括扩展名.txt)作为图片文件的命名前缀。

  3. 智能图片重命名:

    • 对于文件名看似乱码或不含下划线的图片,脚本会简化其名称并编号(如“(1)”, “(2)”等)。
    • 对于其他图片,脚本会删除文件名中不需要的部分,如特定的无关字符或数字,并在保留有效部分的同时加上从txt文件中获取的前缀。
  4. 避免命名冲突:如果重命名的文件名已存在,脚本会自动在文件名后加上括号内的数字(如“(1)”, “(2)”等)以避免重复。

使用条件

  • Python 环境:需要在支持Python的环境中运行,确保Python版本至少为Python 3.x。
  • 操作系统:适用于大多数操作系统,包括Windows、macOS和Linux。

使用注意事项

  1. 备份文件:在执行脚本之前,建议对所有相关文件进行备份,以防止意外的文件重命名或数据丢失。

  2. 目录权限:确保你有足够的权限访问和修改指定目录及其子目录下的文件。

  3. 避免中断:脚本运行过程中避免中断操作,以免部分文件被重命名而其他文件未处理,导致文件命名不一致。

  4. 检查文件类型:脚本只对图片文件进行重命名,确保目标文件夹中不包含非图片文件,或者这些文件的命名对你而言不重要。

  5. 检查文本文件:确保每个子文件夹中只有一个txt文件用于命名,且其名称适合作为文件前缀。

  6. 编码问题:如果脚本在处理特定文件名时遇到编码问题,可能需要调整脚本以适应特定的文件名编码方式。

  7. 测试运行:在大规模使用之前,先在一个小规模的、包含少量文件的文件夹上测试脚本,以确保它按照预期工作。

import os
import re

UNWANTED_UNITS = ["undefined", "皮皮", "zly324"]
IMAGE_EXTENSIONS = [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff"]

# 检查文件是否为图片
def is_image_file(filename):
    _, ext = os.path.splitext(filename)
    return ext.lower() in IMAGE_EXTENSIONS

# 获取文件夹内第一个txt文件的名称(不包括扩展名)
def get_first_txt_title(path):
    try:
        for file in os.listdir(path):
            if file.endswith(".txt"):
                return os.path.splitext(file)[0]
    except Exception as e:
        print(f"在'{path}'检查txt文件时发生错误:{e}")
    return None

# 生成唯一的新文件名
def generate_unique_filename(path, filename, ext):
    new_file_path = os.path.join(path, filename + ext)
    counter = 1
    while os.path.exists(new_file_path):
        new_file_path = os.path.join(path, f"{filename}({counter}){ext}")
        counter += 1
    return new_file_path

# 重命名图片文件
def rename_image_files(path, prefix):
    if not prefix:  # 如果没有找到txt文件或文件夹中没有txt文件
        print(f"在'{path}'中未找到txt文件或txt文件为空,跳过重命名操作。")
        return

    try:
        files = [f for f in os.listdir(path) if is_image_file(f) and os.path.isfile(os.path.join(path, f))]
        counter = 1

        for file in files:
            filename, ext = os.path.splitext(file)
            # 乱码类
            if re.search(r'[a-f0-9]{32}', filename) or not '_' in filename:
                renamed = f"({counter})"
                counter += 1
            else:
                parts = re.split(r'[_]+', filename)
                parts.pop(0)  # 删除第一个单元

                # 删除特定的单元
                parts = [part for part in parts if part not in UNWANTED_UNITS]

                # 删除所有带数字的单元
                parts = [part for part in parts if not any(char.isdigit() for char in part)]

                # 删除特定规则的元素
                while parts and re.search(r'^[a-f0-9\-]{32,}$', parts[-1]):
                    parts.pop(-1)
                while parts and len(parts[-1]) <= 4:
                    parts.pop(-1)

                renamed = '_'.join(parts)

            # 添加前缀
            renamed = f"{prefix}_{renamed}"

            # 生成唯一的文件名
            new_file_path = generate_unique_filename(path, renamed, ext)
            os.rename(os.path.join(path, file), new_file_path)

        print(f"在'{path}'中重命名完成。")
    except Exception as e:
        print(f"在'{path}'中重命名过程中发生错误:{e}")

# 遍历并重命名子文件夹中的图片文件
def rename_images_in_subfolders(root_path):
    for subdir, dirs, _ in os.walk(root_path):
        prefix = get_first_txt_title(subdir)
        if prefix:
            rename_image_files(subdir, prefix)

# 主函数
def main():
    root_path = input("请输入总文件夹地址: ")
    rename_images_in_subfolders(root_path)

if __name__ == "__main__":
    main()

 

标签:文件夹,文件,MJ,parts,file,path,txt,os
From: https://www.cnblogs.com/zly324/p/17913166.html

相关文章

  • MJ数据处理:读取txt版
    读取文件夹内的txt名称,并根据该名称将其批量修改importosimportreUNWANTED_UNITS=["undefined","皮皮","zly324"]IMAGE_EXTENSIONS=[".jpg",".jpeg",".png",".gif",".bmp",".tiff"]......
  • 域名所有权验证 —— DNS TXT 域名验证
    参考:https://help.aliyun.com/zh/cdn/getting-started/verify-the-ownership-of-a-domain-namehttps://blog.csdn.net/qq_17335549/article/details/131781640    ------------------------------       ......
  • 自动化查找并记录含图片文件夹的Python脚本
    功能介绍此Python脚本用于遍历指定的父目录,自动识别并记录所有包含图片文件(如PNG、JPG、GIF等格式)的子文件夹。脚本运行后,将在父目录下生成一个名为“文件夹名统计”的Excel表格,其中列出了所有含有图片的文件夹名称。这对于整理大量分散在不同子文件夹中的图片文件特别有用,尤其是......
  • Matlab 读取父文件下子文件夹内容
    1functionResizeImageofData2%读取文件夹下的所有数据3Files=dir('D:\1\');%父文件夹4LengthFiles=length(Files);5oldFolder=cd;%打开当前工作目录6spath=strcat(oldFolder,'\Data\');%在工程目录下创建名为'\Data\'的新文件夹78if~exis......
  • 在linux中,用-r还是-p处理递归的文件夹
    在Linux中,递归处理文件夹用-r还是-p选项1.使用-r:-r来表示递归,例如cp和rm。例如:-r通常用于表示递归操作,例如在复制目录或删除目录时使用。示例:复制目录及其内容:cp-rsource_directorydestination_directory递归删除目录及其内容:rm-rdirectory递归地移动目......
  • ExeIconToFolder 提取exe程序图标,并设置exe所在文件夹图标
    ExeIconToFolder提取exe程序图标,并设置exe所在文件夹图标2023年12月17日提取exe程序图标,并设置exe所在文件夹图标所需第三方程序IconsExtract-EXE图标提取(nirsoft.net)RestartExplorer---重新启动资源管理器(sordum.org)代码@echooffsetlocalenabledelayed......
  • Jmeter46 配置元件,读取.properties,.ini, .txt 配置文件,为全局做自动化
     配置元件主要是用与测试前的配置,将配置转换为变量设置到jmetercontext中。而jmeter默认并没有配置元件(.properties)读取器,但是由于jmeter是开源的,我们可以自己定义一个配置元件来读取配置文件。插件下载地址:https://www.testautomationguru.com/jmeter-property-file-reader-......
  • python操作文件夹
    帮我写一个python程序遍历文件夹下所有的压缩文件,如ziprar7z结尾的文件等等当然可以!以下是一个Python程序,它可以遍历指定文件夹下的所有压缩文件,如zip、rar、7z等等。你可以根据需要修改代码中的路径和文件类型。请注意,这个程序需要安装第三方库patool和pyunpack,你可以使用pip......
  • 如何清空项目文件夹,重新检出新分支
    #(find.-typed-name".git"&&find.-name".gitignore"&&find.-name".gitmodules")|xargsrm-rf#gitclone-bdevelophttps://git的用户名:git的密码@codeup.aliyun.com/61a479aecb55679b040xxxc56edddb/phpweb......
  • JavaScript 浏览本地文件夹
    1.JavaScript浏览本地文件夹button.onclick=asyncfunction(){//给按钮绑定事件try{consthandler=awaitshowDirectoryPicker(//{//mode:'readwrite',//指定读写模式:读/读写//startIn:'documents'//......