我对Python比较陌生,我正在尝试用Python创建一段代码,用来查看文本文件的每一行是否有某个值,由用户输入,然后用新的代替一行一个由代码创建的。但是,当我尝试代码时,文件变为空白。我有f.close()
,但代码仍然不会写。
这是我的代码:
import fileinput
f = open("task3.txt", "w+")
name = input("What is your name?")
lines = f.readlines()
print(lines)
for i in lines:
splitlines = i.split(":")
print(splitlines)
splitnums = splitlines[1].split(", ")
print(splitnums)
for i in splitnums:
i = int(i)
edit = input('Would you like to edit this entry?')
if edit == "Yes":
valueNew = input("Which new value would you like to add?")
del(splitnums[2])
splitnums.append(splitnums[1] + "\n")
splitnums[1] = splitnums[0] + ", "
splitnums[0] = valueNew + ", "
print(splitnums)
numstring = ''.join(splitnums)
splitlines[1] = ": "
splitlines.append(numstring)
newval = ''.join(splitlines)
print(newval)
f.write(newval)
else:
print("Okay.")
f.close()
答案 0 :(得分:2)
您需要阅读整个文件,然后在再次写入之前更改内容,因为w
会清除文件内容。如果追加(添加到文件结尾)文件就足够了,您可以将mode
参数更改为a
以在追加模式下打开文件。
您还应该考虑使用with
而不是手动关闭文件:
with open('file.txt', 'w') as f:
...
,因为这会关闭文件并清理,无论抛出的错误等等。
答案 1 :(得分:2)
模式w+
表示"打开文件进行写入,先将其截断,然后让我阅读它"
所以,它完全按照你的要求行事。
如果你想打开文件进行阅读,还要让它写出来,那就拼写了r+
。或者,在Python 3.0+中,您也可以使用普通+
。
open
的文档甚至包含了解释您所问的内容的不同模式的示例:
默认模式为' r' (打开阅读文本,' rt'的同义词)。对于二进制读写访问,模式' w + b'打开并将文件截断为0字节。 ' R + B'打开文件而不截断。
或者,对于the 2.x version:
模式' r +',' w +'和' a +'打开文件进行更新(读写);请注意' w +'截断文件。
这是r+
和w+
(或r+b
和w+b
)之间的区别:当你没有{39}时使用r
; t想要截断。