替换.data文件字符串遇问题:Python代码未生效且出现异常字符
问题原因与解决办法
嘿,这个问题我之前也踩过坑,咱们一步步拆解解决:
一、替换失效&乱码的核心原因
- 字符串不可变导致替换无效:Python里的字符串是不可变类型,
line.replace("no","0")不会直接修改原line变量,而是返回一个全新的替换后字符串。你现在的代码只调用了replace,但没把新字符串重新赋值给line,所以写入文件的还是原内容,替换自然没生效。 - 编码不匹配导致乱码:你看到的奇怪字符‘ഀ’,是因为打开文件时没指定编码,Python用系统默认编码读取,把文件里的特殊换行符/编码标记解析成了乱码。
二、修正后的代码方案
我给你两种写法,推荐第二种更安全的:
写法1:修正赋值逻辑+指定编码
fString = open("diagnosis.data","r", encoding="utf-8") # 指定编码避免乱码 fBool = open("diagnosis1.txt","w", encoding="utf-8") for line in fString: # 将替换后的新字符串重新赋值给line line = line.replace("no","0").replace("yes","1") fBool.write(line) fString.close() fBool.close()
写法2:用with语句自动管理文件(更推荐)
with语句会自动帮你关闭文件,不用手动调用close(),避免忘记关闭导致的资源泄漏:
with open("diagnosis.data", "r", encoding="utf-8") as fString, open("diagnosis1.txt", "w", encoding="utf-8") as fBool: for line in fString: # 链式调用replace,一步完成两次替换 modified_line = line.replace("no", "0").replace("yes", "1") fBool.write(modified_line)
如果utf-8编码还是有乱码,你可以试试把编码改成latin-1,UCI的老数据集经常用这个编码。
内容的提问来源于stack exchange,提问作者meisterich 0
相关产品推荐
相关产品推荐

