You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

替换.data文件字符串遇问题:Python代码未生效且出现异常字符

问题原因与解决办法

嘿,这个问题我之前也踩过坑,咱们一步步拆解解决:

一、替换失效&乱码的核心原因

  1. 字符串不可变导致替换无效:Python里的字符串是不可变类型,line.replace("no","0")不会直接修改原line变量,而是返回一个全新的替换后字符串。你现在的代码只调用了replace,但没把新字符串重新赋值给line,所以写入文件的还是原内容,替换自然没生效。
  2. 编码不匹配导致乱码:你看到的奇怪字符‘਍ഀ’,是因为打开文件时没指定编码,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:08:06