我想编写一些代码来替换文本文件(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是否被视为阅读。
答案 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}}写。