尝试用Python写入文件会使文件变为空白

时间:2015-04-17 08:02:24

标签: python file input

我对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()

2 个答案:

答案 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+bw+b)之间的区别:当你没有{39}时使用r ; t想要截断。