Python:为什么我的写入函数在while循环中不起作用?

3

我正在尝试制作一个程序,不断要求输入字符串并将其输出到txt文件中。如果没有while循环,它可以正常工作,所以我不太确定出了什么问题。

infile = open('hardlopers.txt', 'a+')
i = 0
while i < 1:
    naam = input('geef je naam:')
    infile.write(naam)

这是一个无限循环,因为您没有更改“i”,我猜这就是您想要的。您什么时候检查文件?如果在关闭程序之前检查文件,则缓冲区可能不会被刷新,因此另一个程序将无法看到数据。尝试在写入后使用infield.flush() - cdarke
3个回答

5
您的程序将一直运行。您正在写入的文件直到关闭它(或通过使用 infile.flush() 显式地告诉它)才会“保存”(写入实际文件)。没有循环,程序终止,这意味着文件已关闭并保存了您的更改。 flush() 方法并不总是一定会保存文件。在这种情况下,您可以使用 os.fsync(infile.fileno())

请将以下与编程有关的内容从英语翻译为中文。 仅返回翻译后的文本:(答案可以提到“文件/ TexIOWrapper.flush”。) - timgeb

3
文件内容并不会立即写入硬盘。内容会存储在文件内部缓存中,并最终由操作系统决定何时将数据实际持久化到硬盘上。
关于文件刷新(也称将缓存清空到磁盘):Python多久刷新一次文件? 写文件时最好使用with open(name, mode) as filehandle:的范式。
请尝试:
with open('hardlopers.txt', 'a+') as infile:
    while True:
        naam = input('geef je naam:')
        if naam:
            infile.write(naam)
        else:
            break

# now its written - with open autocloses on leaving the block

with open("hardlopers.txt","r") as r:
    t = r.read()
print("")
print(t)

输出:

geef je naam:a
geef je naam:b
geef je naam:c
geef je naam:d
geef je naam:
abced

请参阅示例: 读写文件

1
你只需要从 while 循环中 break,这样内容才会被写入文件。
infile = open('hardlopers.txt', 'a+')
i = 0
while i < 1:
    naam = input('geef je naam:')
    if naam == 'q':
        i = 1 # break from the loop
    else:
        infile.write(naam)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接