You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现文件名(不含扩展名)西里尔文转拉丁文重命名报错解决

问题分析与解决方案

你遇到的FileNotFoundError主要源于三个问题:

  1. 函数接收的path参数未被使用,os.listdir()默认遍历当前工作目录,而非你指定的目标文件夹
  2. 调用os.rename()时传入的源文件是不含扩展名的文件名,但实际文件是带扩展名的,系统找不到这个无扩展名的文件
  3. 用file_name.rindex('.')分离扩展名不可靠,遇到无扩展名的文件会直接报错

修正后的代码

import os

def normalize(path):
    CYRILLIC = ('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч','Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я')
    LATIN = ('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Zh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'Ts', 'Ch', 'Sh', 'Sch', '', 'Y',' ', 'E', 'Yu', 'Ya')
    TRANSLIT_DICT = {}
    for c, l in zip(CYRILLIC, LATIN):
        TRANSLIT_DICT[ord(c)] = l
        TRANSLIT_DICT[ord(c.lower())] = l.lower()

    # 遍历传入的目标路径下的所有项
    for item in os.listdir(path):
        # 拼接完整文件路径,避免相对路径混乱
        item_full_path = os.path.join(path, item)
        # 仅处理文件,跳过目录
        if os.path.isfile(item_full_path):
            # 用os.path.splitext可靠分离文件名与扩展名,兼容无扩展名文件
            filename_without_ext, ext = os.path.splitext(item)
            # 翻译文件名部分
            new_filename = filename_without_ext.translate(TRANSLIT_DICT)
            # 拼接新的完整文件路径
            new_item_full_path = os.path.join(path, new_filename + ext)
            # 执行重命名操作
            os.rename(item_full_path, new_item_full_path)

关键修正说明

  • 全程使用完整文件路径:通过os.path.join拼接路径,避免当前工作目录与目标路径不一致导致的文件定位错误
  • 替换扩展名分离方式:用os.path.splitext替代rindex('.'),自动兼容无扩展名的文件,不会触发索引错误
  • 重命名目标正确:源文件是带扩展名的完整路径,目标文件是翻译后的文件名加上原扩展名的完整路径,确保系统能找到并正确修改文件

内容的提问来源于stack exchange,提问作者Andrii Kovalchuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:10:12