***MJ新工作流

 
1.(去下划线)我有一个文件夹,遍历其中所有图片文件名称,请删除所有图片第一个下划线以及第一个下划线之前的内容。
复制代码
import os

def rename_images(directory):
    # 遍历目录中的所有文件
    for filename in os.listdir(directory):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
            # 找到第一个下划线的位置
            underscore_index = filename.find('_')
            if underscore_index != -1:
                # 生成新的文件名
                new_filename = filename[underscore_index + 1:]
                # 构造完整的文件路径
                old_file = os.path.join(directory, filename)
                new_file = os.path.join(directory, new_filename)
                # 重命名文件
                os.rename(old_file, new_file)
                print(f"Renamed '{filename}' to '{new_filename}'")

# 用户输入文件夹地址
folder_path = input("请输入文件夹的完整路径: ")
rename_images(folder_path)
复制代码

2.(只留25个英文字符)我有一个文件夹,里面有很多图片,请 每次启动程序询问文件夹地址。 1.(保持扩展名)只保留图片名称中的英文,删去所有空格与特殊标点与中文。 2.从第一个英文字符开始,只保留每张图片名中的前25个英文字符,并全部转换成小写英文字母,并用这25个字符重命名图片。遇到有重复的英文名称则加后缀(1),(2),(3)等。

复制代码
import os
import re

def sanitize_filename(filename):
    """只保留英文字符,并删除空格与特殊标点"""
    return re.sub('[^A-Za-z]+', '', filename)

def main():
    folder_path = input("请输入文件夹地址: ")
    if not os.path.isdir(folder_path):
        print("提供的地址不是一个有效的文件夹!")
        return

    filenames = os.listdir(folder_path)
    new_names = {}
    for filename in filenames:
        file_ext = os.path.splitext(filename)[1]
        if file_ext.lower() not in ['.jpg', '.jpeg', '.png', '.gif', '.bmp']:
            continue
        
        # 清理并截取前25个字符
        clean_name = sanitize_filename(filename)[:25].lower()
        
        # 处理可能的重名
        original_clean_name = clean_name
        counter = 1
        new_file_path = os.path.join(folder_path, clean_name + file_ext)
        while clean_name in new_names.values() or os.path.exists(new_file_path):
            clean_name = f"{original_clean_name}({counter})"
            new_file_path = os.path.join(folder_path, clean_name + file_ext)
            counter += 1
        
        # 尝试重命名,处理可能的错误
        try:
            os.rename(os.path.join(folder_path, filename), new_file_path)
            new_names[filename] = clean_name + file_ext
        except OSError as e:
            print(f"无法重命名文件 {filename} 到 {new_file_path}: {e}")

    print("文件重命名完成。")

if __name__ == "__main__":
    main()
复制代码

3.(excel表内操作)我有一张excel表格,请把第一列的信息只保留英文字符,并删除所有空格标点和中文,然后罗列在第三列,完成后每个单元格保留前25个字符。告诉我公式的操作方式。

=LEFT(TEXTJOIN("", TRUE, IF(ISNUMBER(FIND(MID(SUBSTITUTE(A2, " ", ""), ROW(INDIRECT("1:" & LEN(SUBSTITUTE(A2, " ", "")))), 1), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")), MID(SUBSTITUTE(A2, " ", ""), ROW(INDIRECT("1:" & LEN(SUBSTITUTE(A2, " ", "")))), 1), "")), 25)

4.给我一个python脚本,每次启动程序,要求用户输入一个原文件夹地址,一个目标文件夹地址,一个excel表格地址,一个以及一个输入列序号X,一个命名列序号Y,一个txt参考列号Z 我有一个文件夹,里面有很多图片,请针对每张图片名称,在excel表格从左向右第X列(输入列)的单元格中找到与图片名称前25个英文字符相同的单元格,然后在同一行从左向右第Y列(命名列)的单元格中读取信息并在目标文件夹地址下用命名列的信息建立一个文件夹(如果已有同样名称的文件夹则不用建立,直接移动即可)。将该图片移动到该文件夹内。全部图片移动完成后,在目标地址每个新建的文件夹内建立一个txt文档,txt的名称为所在文件夹名称,txt的内部信息根据”txt参考列号Z“在excel表格的第Z列读取信息并输入txt内部(根据Y列匹配文件夹名称并读取同一行的Z列信息)。

复制代码
import os
import shutil
import pandas as pd

def main():
    try:
        # 获取用户输入
        source_dir = input("请输入原文件夹地址: ")
        target_dir = input("请输入目标文件夹地址: ")
        excel_path = input("请输入Excel表格地址: ")
        input_col_index = int(input("请输入输入列序号X: ")) - 1  # 从0开始索引
        name_col_index = int(input("请输入命名列序号Y: ")) - 1
        txt_col_index = int(input("请输入txt参考列号Z: ")) - 1
        
        # 检查目录有效性
        if not os.path.exists(source_dir):
            raise Exception(f"源文件夹地址无效:{source_dir}")
        if not os.path.exists(target_dir):
            os.makedirs(target_dir)
        if not os.path.exists(excel_path):
            raise Exception(f"Excel文件地址无效:{excel_path}")

        # 读取Excel文件
        df = pd.read_excel(excel_path)
        if df.columns.size <= max(input_col_index, name_col_index, txt_col_index):
            raise Exception("列号超出Excel表格范围")

        # 遍历源文件夹中的所有图片
        for filename in os.listdir(source_dir):
            if filename.lower().endswith((".png", ".jpg", ".jpeg")):  # 根据需要可以添加更多图片格式
                # 获取图片文件名的前25个英文字母
                clean_name = ''.join([c for c in filename if c.isalpha()])[:25]
                
                # 查找Excel中匹配的行
                match = df[df.iloc[:, input_col_index].astype(str).str.startswith(clean_name)]
                if not match.empty:
                    # 获取目标文件夹名
                    folder_name = match.iloc[0, name_col_index]
                    folder_path = os.path.join(target_dir, folder_name)
                    
                    # 如果目标文件夹不存在,则创建
                    if not os.path.exists(folder_path):
                        os.makedirs(folder_path)
                    
                    # 移动图片到目标文件夹
                    shutil.move(os.path.join(source_dir, filename), os.path.join(folder_path, filename))
                    
                    # 如果txt文件不存在,创建并写入信息
                    txt_path = os.path.join(folder_path, folder_name + '.txt')
                    if not os.path.exists(txt_path):
                        with open(txt_path, 'w') as txt_file:
                            txt_file.write(str(match.iloc[0, txt_col_index]))
    except Exception as e:
        print(f"发生错误:{e}")

if __name__ == "__main__":
    main()
复制代码

 

posted @   不上火星不改名  阅读(12)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示