如何移除文件名中的BOM字符以解决文件找不到错误?
解决文件名中BOM字符导致的FileNotFoundError问题
首先得明确:你遇到的问题是文件名本身包含BOM字符,而非文件内容里有BOM——这也是为什么设置encoding='utf-8-sig'没用的原因,这个参数是用来处理文件内容编码的,和文件名无关;而手动切片filename[:-11]+"3.txt"没生效,大概率是因为你没精准定位到BOM字符的位置(BOM是单个Unicode字符\ufeff,不是一串可见字符)。
下面给你几个可行的解决方案:
方案1:精准移除BOM字符
先确认文件名里的BOM位置,你可以先打印文件名的原始表示,看看隐藏字符:
filename = r"C:\Users\Jonis\Desktop\New folder\vardai tikri\becach_besmile_vardai_failas_3.txt" print(repr(filename)) # 输出会显示类似末尾带有'\ufeff'的内容
确认后,直接替换掉BOM字符即可:
# 清理文件名中的BOM clean_filename = filename.replace('\ufeff', '') # 用清理后的文件名打开文件 with open(clean_filename, mode="r", encoding="utf-8") as file: for line in file: print(line)
方案2:过滤所有不可见控制字符
如果不确定文件名里还有其他隐藏控制字符,可以用unicodedata模块过滤掉所有控制类字符(BOM属于控制字符范畴):
import unicodedata filename = r"C:\Users\Jonis\Desktop\New folder\vardai tikri\becach_besmile_vardai_failas_3.txt" # 保留非控制类字符 clean_filename = ''.join(c for c in filename if not unicodedata.category(c).startswith('C')) with open(clean_filename, mode="r", encoding="utf-8") as file: for line in file: print(line)
方案3:手动重命名文件(适合单文件)
如果只是单个文件,最简单的方式是在Windows文件资源管理器里操作:
- 选中目标文件,按
F2进入重命名模式 - 光标移到文件名末尾那个看不见的字符位置(就是你看到的
3里的隐藏部分),按退格键删除 - 重新输入正常的文件名(比如
becach_besmile_vardai_failas_3.txt)
额外提醒
注意在Python里写文件路径时,最好用原始字符串(加r前缀),避免路径中的\被当成转义字符(比如\n会被解析为换行符),这也是我上面代码里都加了r的原因。
内容的提问来源于stack exchange,提问作者Jonas.S.
相关产品推荐
相关产品推荐

