Python: Почему моя функция записи не работает в цикле while? - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь создать программу, которая постоянно запрашивает строку и выводит ее в файл .txt.Он работает без цикла while, поэтому я не совсем уверен, что здесь происходит.

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

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Содержимое файла не сразу записывается на ваш жесткий диск.Содержимое хранится во внутреннем буфере файлов и, в конце концов, передается вашей операционной системе, которая, в свою очередь, решает, когда на самом деле сохранять ваши данные на вашем диске.

Подробнее о сбросе файлов (или очистке буфера на диске): Как часто 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

См. Примеры по адресу: файлы для чтения и записи

0 голосов
/ 06 октября 2018

Вам просто нужно break из цикла while, чтобы содержимое фактически записывалось в файл.

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)
0 голосов
/ 06 октября 2018

Ваша программа будет работать вечно.Файл, в который вы пишете, не будет «сохраняться» (записываться в фактический файл) до тех пор, пока вы не закроете его (или явно не скажете, используя infile.flush()).Без цикла программа завершается, что означает, что файл закрыт и ваши изменения сохранены.

Метод flush() не всегда сохраняет файл.В этом случае вы можете использовать os.fsync(infile.fileno()).

...