读取cp1256编码文件时startswith方法失效,如何无需转码解决?
解决cp1256编码文件的startswith匹配问题
问题根源是你打开文件时未指定正确编码,Python默认采用系统编码读取,导致读取的字符串看似能正常打印,但内部字符编码实际不匹配,最终让startswith无法正确匹配关键字。
直接修改open函数指定编码即可解决,优化后的代码如下:
printing = False # 显式指定源文件编码为cp1256 with open(SourceFile, "r", encoding="cp1256") as file: # 用with语句管理输出文件,自动处理资源释放,同时指定编码避免乱码 with open(PointsFile, "w", encoding="cp1256") as points_file: for line in file: # 修正原代码中关键字带多余换行的问题,匹配不带换行的目标字符串 if line.startswith("NODes"): printing = True continue elif line.startswith(";;CON"): printing = False break if printing: print(line, file=points_file, end="") # 加end=""避免重复添加换行符 # 无需手动调用close(),with语句会自动关闭文件
关键细节说明:
- 指定编码是核心:打开文件时必须加
encoding="cp1256",确保Python按文件实际编码解析字符,这样得到的字符串才是准确的,startswith才能正常匹配。 - 修正关键字格式:原代码中
"NODes\n"带换行符是无效的,因为line本身已包含每行末尾的换行,匹配时只需用纯关键字即可。 - 输出文件编码同步:写入
PointsFile时也指定编码,避免写入过程中出现编码转换乱码,可选择和源文件一致的cp1256,或根据需求用UTF-8。 - 用with语句管理文件:替代手动
close(),Python会自动处理文件资源的释放,更安全可靠。
内容的提问来源于stack exchange,提问作者M.Mazzaz
相关产品推荐
相关产品推荐

