Python运行报charmap编码错误,指定UTF-8读取文件仍无法解决怎么办?
问题根因
报错指向写入masterFile时的编码失败:Windows平台下Python调用open时如果不指定编码参数,会默认使用操作系统的区域编码(你的环境里是cp1252),而你读取的源文件是UTF-8编码,里面包含cp1252字符集不支持的字符,写入时就会触发编码错误。你之前只给读取源文件的open加了UTF-8编码参数,没有给输出文件的open加,所以问题没有解决。
修复方案
- 所有文件IO操作(包括读取源文件、写入两个结果文件)都统一指定
encoding="utf-8"参数 - 修正glob路径前缀多余的
#字符,避免匹配不到目标文件 - 可选给写入操作增加
errors="replace"参数,遇到极端无法编码的字符时自动替换为占位符,避免程序中途崩溃
修正后完整代码
import glob searchWord = "Hello" # 用with上下文管理器统一管理所有文件句柄,自动完成文件关闭操作 with open("C:/Users/Anthony/Documents/TextDataFolder/TextData.txt", 'w', encoding="utf-8") as dataFile, \ open("C:/Users/Anthony/Documents/TextDataFolder/masterFile.txt", 'w', encoding="utf-8") as masterFile: # 去掉路径前多余的#号 files = glob.iglob("C:/Users/Anthony/Documents/Texts/*.txt", recursive = True) for file in files: # 读取源文件指定UTF-8编码 with open(file, encoding="utf-8") as f: print(file) for index, line in enumerate(f): masterFile.write("Line {}: {}\n".format(index, line.strip())) if searchWord in line: print("Line {}: {}".format(index, line.strip())) dataFile.write("Line {}: {}\n".format(index, line.strip()))
内容的提问来源于stack exchange,提问作者Anthony Jimenez
相关产品推荐
相关产品推荐

