***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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步