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

时间:2018-10-06 13:12:59

标签: python python-3.x while-loop

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

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

3 个答案:

答案 0 :(得分:4)

您的程序将永远运行。除非关闭(或使用flush()明确告诉它),否则您要写入的文件不会“保存”(写入实际文件)。没有循环,程序将终止,这意味着文件已关闭并且您的更改已保存。

os.fsync(infile.fileno())方法不一定总是保存文件。在这种情况下,您可以使用{{1}}。

答案 1 :(得分:3)

文件的内容不会立即写入硬盘。内容存储在文件内部缓冲区中,并最终提供给您的操作系统,进而决定何时将数据正确保留在haddrive上。

有关文件刷新(又称清空缓冲区到磁盘)的更多信息:How often does python flush to a file?

编写时最好使用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

请参见以下示例:reading-and-writing-files

答案 2 :(得分: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)