英文文件名格式化重命名工具,适用于英文论文

[复制链接]
92 |9
发表于 昨天 22:18 | 显示全部楼层 |阅读模式
【英文文件名格式化工具.exe】一键规范文件名,学术党必备!还在手动调整论文标题格式?

分享一款超实用的文件重命名工具,支持多种学术规范命名方式,自动处理标点和大小写,彻底解放双手~

不限于PDF文件,适用于所有英文文件名文件~

核心功能:
   1.三种命名格式一键切换:   
    除介词外首字母大写(of/to等介词小写)仅标题首字母大写(其余全小写)全部字母大写(强调格式)
   2.智能处理标点:删除@#等字符,中文冒号“:”后首字母强制大写
   3. 可视化操作:支持文件预览、批量选择,重命名前可查看效果

使用场景:
    整理文献库时统一标题格式投稿前规范论文文件名批量处理各类英文命名文件格式

使用方法:
   1. 运行程序后点击"选择文件"
   2. 选择命名格式
   3. 预览效果无误后点击"执行重命名"

工具为绿色单文件版,无需安装Python环境,直接双击运行~ 再也不用逐个修改文件名啦!
下载地址:
通过网盘分享的文件:文件名格式化重命名工具.exe链接: https://pan.baidu.com/s/1F7R00BvllUtZBNbRtUeQJQ?pwd=9jk4 提取码: 9jk4
我用夸克网盘分享了「文件名格式化重命名工具.exe」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。链接:https://pan.quark.cn/s/3b675c84374d(附:python程序)

[Python]  
  1. import os
  2. import re
  3. import tkinter as tk
  4. from tkinter import filedialog, ttk, messagebox
  5. # 定义需要小写的介词列表(仅用于第一种命名方式)
  6. prepositions = {'of', 'to', 'in', 'for', 'on', 'with', 'at', 'by',
  7.                 'from', 'up', 'about', 'as', 'but', 'or', 'and'}
  8. class FileRenamerGUI:
  9.     def __init__(self, root):
  10.         self.root = root
  11.         self.root.title("文件名格式化重命名工具")
  12.         self.root.geometry("800x600")
  13.         self.root.resizable(True, True)
  14.         # 设置中文字体支持
  15.         self.setup_fonts()
  16.         # 存储选中的文件
  17.         self.selected_files = []
  18.         # 命名方式选择变量(1: 除介词外首字母大写, 2: 仅首字母大写, 3: 全部大写)
  19.         self.naming_style = tk.IntVar(value=1)
  20.         # 创建界面组件
  21.         self.create_widgets()
  22.     def setup_fonts(self):
  23.         """设置支持中文的字体"""
  24.         default_font = ('SimHei', 10)
  25.         self.root.option_add("*Font", default_font)
  26.     def create_widgets(self):
  27.         """创建GUI组件"""
  28.         # 创建主框架
  29.         main_frame = ttk.Frame(self.root, padding="10")
  30.         main_frame.pack(fill=tk.BOTH, expand=True)
  31.         # 标题标签
  32.         title_label = ttk.Label(main_frame, text="文件名格式化重命名工具", font=('SimHei', 14, 'bold'))
  33.         title_label.pack(pady=10)
  34.         # 命名方式选择框架
  35.         style_frame = ttk.LabelFrame(main_frame, text="命名方式", padding="5")
  36.         style_frame.pack(fill=tk.X, pady=5)
  37.         # 命名方式单选按钮
  38.         ttk.Radiobutton(
  39.             style_frame,
  40.             text="除介词外全部单词首字母大写(默认)",
  41.             variable=self.naming_style,
  42.             value=1
  43.         ).pack(anchor=tk.W, padx=5, pady=2)
  44.         ttk.Radiobutton(
  45.             style_frame,
  46.             text="仅首字母大写(其余小写)",
  47.             variable=self.naming_style,
  48.             value=2
  49.         ).pack(anchor=tk.W, padx=5, pady=2)
  50.         ttk.Radiobutton(
  51.             style_frame,
  52.             text="全部字母大写",
  53.             variable=self.naming_style,
  54.             value=3
  55.         ).pack(anchor=tk.W, padx=5, pady=2)
  56.         # 按钮框架
  57.         button_frame = ttk.Frame(main_frame)
  58.         button_frame.pack(fill=tk.X, pady=5)
  59.         # 选择文件按钮
  60.         select_btn = ttk.Button(button_frame, text="选择文件", command=self.select_files)
  61.         select_btn.pack(side=tk.LEFT, padx=5)
  62.         # 清除选择按钮
  63.         clear_btn = ttk.Button(button_frame, text="清除选择", command=self.clear_selection)
  64.         clear_btn.pack(side=tk.LEFT, padx=5)
  65.         # 重命名按钮
  66.         rename_btn = ttk.Button(button_frame, text="执行重命名", command=self.perform_rename)
  67.         rename_btn.pack(side=tk.RIGHT, padx=5)
  68.         # 预览按钮
  69.         preview_btn = ttk.Button(button_frame, text="预览效果", command=self.preview_changes)
  70.         preview_btn.pack(side=tk.RIGHT, padx=5)
  71.         # 文件列表框架
  72.         list_frame = ttk.LabelFrame(main_frame, text="选中的文件", padding="5")
  73.         list_frame.pack(fill=tk.BOTH, expand=True, pady=5)
  74.         # 创建文件列表
  75.         columns = ('original', 'new_name')
  76.         self.file_tree = ttk.Treeview(list_frame, columns=columns, show='headings')
  77.         # 设置列标题
  78.         self.file_tree.heading('original', text='原始文件名')
  79.         self.file_tree.heading('new_name', text='新文件名(预览)')
  80.         # 设置列宽
  81.         self.file_tree.column('original', width=350)
  82.         self.file_tree.column('new_name', width=350)
  83.         # 添加滚动条
  84.         scrollbar = ttk.Scrollbar(list_frame, orient=tk.VERTICAL, command=self.file_tree.yview)
  85.         self.file_tree.configure(yscroll=scrollbar.set)
  86.         # 布局列表和滚动条
  87.         self.file_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
  88.         scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
  89.         # 状态标签
  90.         self.status_var = tk.StringVar()
  91.         self.status_var.set("就绪 - 请选择文件")
  92.         status_label = ttk.Label(main_frame, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)
  93.         status_label.pack(fill=tk.X, side=tk.BOTTOM, pady=5)
  94.     def process_colon_part(self, part):
  95.         """处理冒号后的部分,确保首字母大写"""
  96.         if not part.strip():
  97.             return part
  98.         # 分割为单词
  99.         words = re.findall(r'\b\w+\b', part.strip())
  100.         if not words:
  101.             return part
  102.         # 第一个单词首字母大写,其余按当前命名方式处理
  103.         first_word = words[0].lower().capitalize()
  104.         remaining_words = words[1:] if len(words) > 1 else []
  105.         # 根据命名方式处理剩余单词
  106.         style = self.naming_style.get()
  107.         processed_remaining = []
  108.         if style == 1:  # 除介词外首字母大写
  109.             for word in remaining_words:
  110.                 lower_word = word.lower()
  111.                 if lower_word in prepositions:
  112.                     processed_remaining.append(lower_word)
  113.                 else:
  114.                     processed_remaining.append(lower_word.capitalize())
  115.         elif style == 2:  # 仅首字母大写,其余小写
  116.             processed_remaining = [word.lower() for word in remaining_words]
  117.         elif style == 3:  # 全部大写
  118.             processed_remaining = [word.upper() for word in remaining_words]
  119.         return first_word + (' ' + ' '.join(processed_remaining) if processed_remaining else '')
  120.     def format_title(self, title):
  121.         """根据选择的命名方式格式化标题,处理冒号并替换为中文冒号"""
  122.         # 将所有英文冒号替换为中文冒号后再处理
  123.         title_with_chinese_colon = title.replace(':', ':')
  124.         # 分割冒号前后部分(使用中文冒号分割)
  125.         if ':' in title_with_chinese_colon:
  126.             parts = title_with_chinese_colon.split(':', 1)  # 只分割一次
  127.             main_part = parts[0].strip()
  128.             colon_part = parts[1].strip() if len(parts) > 1 else ''
  129.             # 处理主部分
  130.             processed_main = self.format_main_part(main_part)
  131.             # 处理冒号后部分(首字母强制大写)
  132.             processed_colon = self.process_colon_part(colon_part)
  133.             return f"{processed_main}:{processed_colon}" if processed_colon else processed_main
  134.         else:
  135.             return self.format_main_part(title_with_chinese_colon)
  136.     def format_main_part(self, main_part):
  137.         """处理标题主部分(冒号前的内容)"""
  138.         words = re.findall(r'\b\w+\b', main_part)
  139.         if not words:
  140.             return main_part
  141.         style = self.naming_style.get()
  142.         if style == 1:  # 除介词外首字母大写
  143.             formatted = []
  144.             for word in words:
  145.                 lower_word = word.lower()
  146.                 if lower_word in prepositions:
  147.                     formatted.append(lower_word)
  148.                 else:
  149.                     formatted.append(lower_word.capitalize())
  150.             return ' '.join(formatted)
  151.         elif style == 2:  # 只有标题首字母大写,其余小写
  152.             if not words:
  153.                 return main_part
  154.             # 第一个单词首字母大写,其余小写
  155.             first_word = words[0].lower().capitalize()
  156.             other_words = [word.lower() for word in words[1:]]
  157.             return ' '.join([first_word] + other_words)
  158.         elif style == 3:  # 全部字母大写
  159.             return ' '.join([word.upper() for word in words])
  160.     def select_files(self):
  161.         """打开文件选择对话框选择文件"""
  162.         files = filedialog.askopenfilenames(
  163.             title="选择要重命名的文件",
  164.             filetypes=[("所有文件", "*.*")]
  165.         )
  166.         if files:
  167.             # 清除之前的预览
  168.             for item in self.file_tree.get_children():
  169.                 self.file_tree.delete(item)
  170.             # 存储并显示选中的文件
  171.             self.selected_files = list(files)
  172.             for file_path in self.selected_files:
  173.                 dir_name, file_name = os.path.split(file_path)
  174.                 name, ext = os.path.splitext(file_name)
  175.                 new_name = self.format_title(name) + ext
  176.                 self.file_tree.insert('', tk.END, values=(file_name, new_name))
  177.             self.status_var.set(f"已选择 {len(self.selected_files)} 个文件")
  178.     def clear_selection(self):
  179.         """清除选中的文件"""
  180.         self.selected_files = []
  181.         for item in self.file_tree.get_children():
  182.             self.file_tree.delete(item)
  183.         self.status_var.set("已清除选择 - 请重新选择文件")
  184.     def preview_changes(self):
  185.         """预览重命名效果"""
  186.         if not self.selected_files:
  187.             messagebox.showinfo("提示", "请先选择文件")
  188.             return
  189.         # 更新预览
  190.         for i, file_path in enumerate(self.selected_files):
  191.             dir_name, file_name = os.path.split(file_path)
  192.             name, ext = os.path.splitext(file_name)
  193.             new_name = self.format_title(name) + ext
  194.             self.file_tree.item(self.file_tree.get_children()[i], values=(file_name, new_name))
  195.         self.status_var.set(f"已更新 {len(self.selected_files)} 个文件的预览效果")
  196.     def perform_rename(self):
  197.         """执行文件重命名操作"""
  198.         if not self.selected_files:
  199.             messagebox.showinfo("提示", "请先选择文件")
  200.             return
  201.         success_count = 0
  202.         error_count = 0
  203.         error_files = []
  204.         for file_path in self.selected_files:
  205.             try:
  206.                 dir_name, file_name = os.path.split(file_path)
  207.                 name, ext = os.path.splitext(file_name)
  208.                 new_name = self.format_title(name) + ext
  209.                 new_path = os.path.join(dir_name, new_name)
  210.                 if file_path != new_path:  # 只有当文件名有变化时才重命名
  211.                     os.rename(file_path, new_path)
  212.                     success_count += 1
  213.             except Exception as e:
  214.                 error_count += 1
  215.                 error_files.append(f"{file_name}: {str(e)}")
  216.         # 显示结果
  217.         result_msg = f"重命名完成!\n成功: {success_count} 个文件\n失败: {error_count} 个文件"
  218.         if error_files:
  219.             result_msg += "\n\n错误详情:\n" + "\n".join(error_files)
  220.         messagebox.showinfo("操作结果", result_msg)
  221.         # 清除选择
  222.         self.clear_selection()
  223. if __name__ == "__main__":
  224.     root = tk.Tk()
  225.     app = FileRenamerGUI(root)
  226.     root.mainloop()
复制代码





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 昨天 22:18 | 显示全部楼层
支持一下
回复

使用道具 举报

发表于 昨天 22:18 | 显示全部楼层
中文英文还得不同软件吗
回复

使用道具 举报

发表于 昨天 22:19 | 显示全部楼层
谢谢,刚好在写硕士论文,看看能否用上
回复

使用道具 举报

发表于 昨天 22:19 | 显示全部楼层
还有这种好东西,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 昨天 22:20 | 显示全部楼层
这个里面没有考虑中文的,中文情景太多了,需要设定很多需求,而且这方面软件已经有很多了,例如reNamer,renametool等,我是使用中发现缺少英文命名大小写这方面的命名才制作了这个小工具
回复

使用道具 举报

发表于 昨天 22:21 | 显示全部楼层
非常实用的工具 收下了
回复

使用道具 举报

发表于 昨天 22:22 | 显示全部楼层
好东西好东西
回复

使用道具 举报

发表于 昨天 22:22 | 显示全部楼层
不错的软件 ,谢谢
回复

使用道具 举报

发表于 昨天 22:22 | 显示全部楼层
这个不错的软件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表