Python读取CMD输出的TXT文件无法查找字符串问题求助
解决CMD生成TXT文件字符串查找失败问题
核心原因:编码不匹配
Windows CMD命令输出的文本文件,在中文系统下默认采用GBK(CP936)编码,而Python使用open()函数不带编码参数时,会采用当前系统默认编码,若环境编码不一致,会导致读取的字符串出现隐形乱码——表面显示正常但实际字符不匹配,最终find()返回-1。
解决方案
1. 指定正确编码打开文件
修改代码,明确指定文件编码为GBK(中文Windows CMD输出的标准编码):
with open("output.txt", "rt", encoding="gbk") as f: content = f.read() print(content.find("OS Name"))
如果是英文系统的CMD输出,可尝试替换为encoding="cp1252"。
2. 检测文件实际编码
若指定GBK仍无效,可先检测文件的真实编码:
import chardet with open("output.txt", "rb") as f: result = chardet.detect(f.read()) print(result['encoding'])
将检测出的编码替换到open()的encoding参数中即可。
3. 排查不可见字符
若编码正确仍找不到目标字符串,可能是文件中存在不可见控制字符(如全角空格、特殊制表符),可打印读取内容的原始字符编码排查:
with open("output.txt", "rt", encoding="gbk") as f: content = f.read() # 打印每行前10个字符的Unicode编码,对比目标字符串编码 target_codes = [ord(c) for c in "OS Name"] print(f"目标字符编码: {target_codes}") for line in content.splitlines(): print(f"\n行内容: {line}") print(f"行首字符编码: {[ord(c) for c in line[:10]]}")
通过对比编码值,可找出不匹配的异常字符。
内容的提问来源于stack exchange,提问作者Victor Rodriguez
相关产品推荐
相关产品推荐

