替换.data fi中的字符串

2024-09-28 17:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个看似简单的问题。我有一个数据集:存档.ics.uci.edu/ml/机器学习数据库/acute/诊断.数据 我想将“否”替换为“0”,将“是”替换为“1”

我尝试过以下代码:

fString = open("diagnosis.data","r")

fBool = open("diagnosis1.txt","w")

for line in fString:

        line.replace("no","0")

        line.replace("yes","1")

        fBool.write(line) 

fString.close()

fBool.close()

唯一发生的事情是最后一个“是/否”被添加了一个。我不知道为什么它不起作用。你知道吗


Tags: 数据代码机器数据库closelineopenml
3条回答

因为replace返回修改后的字符串,所以需要分配它。原作原封不动。我想你需要:

with open("diagnosis.data", "r") as fString, open("diagnosis1.txt", "w") as fBool:
    for line in fString:
        nline = line.replace("no", "0")
        nline = nline.replace("yes", "1")
        fBool.write(nline)

您的问题可能是open()不返回字符串列表(或其他一些iterable类型),因此您不能执行for line in fString:,因为这不会生成您可以.replace()的字符串。你知道吗

相反,你需要做如下事情:

fString = open("diagnosis.data","r")

lines = fString.read().split('\n')

fBool = open("diagnosis1.txt","w")

for line in lines:

    newLine = line.replace("no","0")

    newLine = newLine.replace("yes","1")

    fBool.write(newLine) 

fString.close()
fBool.close()

这种方法得到一个字符串列表,每个字符串都是一个文件的一行,然后遍历该行。您还需要确保正确使用.replace()方法,因为它返回新字符串,但不修改原始字符串。你知道吗

.replace string方法返回带有替换参数的字符串,但不会更改对象,因此:

>>> k="lolo"
>>> k.replace('l','k')
'koko'
>>> k
'lolo'
>>> k=k.replace('l','k')
>>> k
'koko'

你想要的是:

line=line.replace("no","0")

或使用辅助变量:

aux=line.replace("no","0").replace("yes","1")

相关问题 更多 >