Python读取文件名列表时打印正常但存列表/文件出现编码不可读问题咨询
问题修复方案
常见异常原因
- 打开
files.txt时未显式指定编码:Windows环境下Python默认用本地GBK编码读取文件,若files.txt是UTF-8(带BOM头也属于该类)格式,会出现解码不匹配问题。部分字符直接print时终端容错显示正常,但存入列表、写入文件时就会呈现乱码。 - 读取的每行默认携带末尾换行符
\n:切片后未清理的话,存入列表的元素会隐含换行符,print整个列表时会显示转义字符,外观类似编码异常。 - 硬编码切片索引
101未做边界判断:如果行长度不足101,或者编码不匹配导致索引切到无效字符位置,会生成乱码内容。
修正后的代码
docs = [] # 按files.txt实际编码替换encoding值,带BOM的UTF-8用utf-8-sig with open('files.txt', 'r', encoding='utf-8') as f: content = f.readlines() for doc in content: if '-' in doc: # 先去除行末尾自带的换行符,不删除内容首尾的有效空格 cleaned_line = doc.rstrip('\n') # 增加长度判断,避免索引越界切出无效字符 if len(cleaned_line) > 101: target_content = cleaned_line[101:] print(target_content) docs.append(target_content) print(docs)
输出文件注意事项
如果需要将docs写入新文件,必须同步指定编码,避免输出乱码:
with open('output.txt', 'w', encoding='utf-8') as f: for name in docs: f.write(f"{name}\n")
编码适配规则
- 若
files.txt是GBK编码保存,将open中的encoding='utf-8'替换为encoding='gbk' - 不确定文件编码时,用记事本打开
files.txt,另存为界面底部可查看当前编码,填入对应值即可
内容的提问来源于stack exchange,提问作者Chandan Gupta
相关产品推荐
相关产品推荐

