在Python的文本文件中的某个位置替换某个值

时间:2018-08-24 08:33:43

标签: python python-3.x list file

我想编写一些代码来替换文本文件(thefile.txt)中某一行上的某个值。我已经寻找了很长时间解决我的问题的方法,但是没有找到它。
这是我写的代码:

clist = [1, 2, 0, 0, 0, 0]
with open("thefile.txt", "w") as dataFile:
    for line in dataFile:
        (key, val1, val2 ,val3, val4, val5) = line.split()
        if key == clist[0]:                               #Find correct line
            line = line.replace(val1, clist[1])           #Replace the value I want, but not the others

我的文本文件如下:

1 0 0 0 13 0
2 9 4 5 2 3
3 0 0 4 0 0

由于某种原因,它不起作用。我仍然是python的初学者,所以我认为问题可能出在我尝试以写入模式(line.split)“读取”文件的事实。我不知道每行的line.split是否被视为阅读。

3 个答案:

答案 0 :(得分:0)

这应该有所帮助。在您的示例中,您没有将更新的内容写回到文件中。

演示:

clist = [1, 2, 0, 0, 0, 0]
res = []
with open("thefile.txt") as dataFile:                    #Read file
    for line in dataFile:
        (key, val1, val2 ,val3, val4, val5) = line.split()
        if int(key) == clist[0]:                               #Find correct line
            res.append(line.replace(val1, str(clist[1])))      #Replace content and append to res
        else:
            res.append(line)

with open("thefile.txt", "w") as dataFile:                #Write back to file.
    for line in res:
        dataFile.write(line)

答案 1 :(得分:0)

您的输出为空,对不对?而且原始文件现在也可能是空的,对吧?

通过以dataFile模式打开w,您将告诉系统将其打开以进行写入,并截断它(如果存在)。以后尝试读取文件时,文件的长度为零,因为您刚在打开时将其截断了。

如果要读取文件,请打开文件进行读取。 (“ r”模式)。如果需要更新文件,请打开它以用于数据绑定(“ a”模式)或更新模式(“ +”变体,因此是“ w +”或“ r +”)。

无论如何,如果您要更新输入文件,则只要它是文本文件(或通常具有可变长度记录的文件),您就很难正确地完成输入文件。最好的方法是根据更新的内容编写一个新文件,并在需要时最后替换原始文件。

答案 2 :(得分:0)

原则上可以在适当位置更新文本文件,但这很棘手且容易出错。它需要的是对文件的随机访问,而文本文件不是为随机访问而设计的。

在执行操作时逐行读取文件(但将模式设置为'r'进行读取),并将每行(是否修改)写到以模式{ {1}}写。