Я пытаюсь записать числа 1 — 4096 в a .Файл TXT использует цикл For, но когда цикл завершен, в файле есть только число 4096 .Текстовый файл

#python #string #for-loop #integer #write

Вопрос:

У меня есть 2 файла:

text.txt

И:

main.py

В main.py , у меня есть следующий код:

 for i in range(1,4097):
    i = str(i)
    file = open("text.txt","w")
    file.write(i)
 

Как вы можете видеть, я хочу сгенерировать все числа от 1 до 4096, но когда я запускаю скрипт, он записывает 4096 только text.txt .

Как я могу написать цифры 1 — 4096 внутри text.txt ?

(Кстати, я сделал i строку ( str() ), потому что не могу написать int() ( i ) в текстовом файле.

Спасибо

Даниил

Ответ №1:

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

Комментарии:

1. Спасибо вам ОООЧЕНЬ большое. Это сработало. Но знаете ли вы, как писать каждый новый номер на новой строке? Потому что теперь он просто пишет «123456789…..4096», И я хотел бы, чтобы он писал так 1n2n3n4.....4095n4096

2. Я не уверен, работает ли это, но вы можете попробовать добавить «n» в каждую строку.

3. @Daniel попробуйте добавить символ новой строки при написании: file.write(i 'n')

4. Просто используй print(i, file=file) по-настоящему. Он добавляет новую строку, и вы можете опустить i = str(i)

Ответ №2:

Вы хотите, чтобы файловый дескриптор был открыт в течение всего цикла:

 with open('text.txt', 'w') as op:
   for i in range(0,10):
       op.write(f'{i}n')
 

Также, используя строки f, вы избегаете приведения i к строке.

Комментарии:

1. @fsimonjetz это интересно! что-то вроде op.write(печать(i)) помогло бы?

2. Замените строку op.write(f'{i}n') на print(i, file=op) . Он одновременно добавляет новую строку и выполняет приведение строки.

3. Кстати, 1 за то with...as , что так это делается! 🙂

Ответ №3:

Способ, которым я это исправил, заключается в следующем:

 file = open("text.txt","a")
for i in range(1,4097):
    i = str(i)
    file.write(str(i)   "n")

file.close()
 

Вместо этого:

 for i in range(1,4097):
    i = str(i)
    file = open("text.txt","w")
    file.write(i)
 

Как вы можете видеть, причина, по которой он не работал, заключается в том, что при open("text.txt","w") запуске он переопределялся text.txt каждый раз, потому open("text.txt") что был установлен в write режим ( w ), а не append в режим ( a ). Поэтому каждый раз, когда он запускался, он переопределял каждое число. Кроме того, если бы я хотел создавать новую строку каждый раз, когда она запускается , все, что мне нужно было бы сделать file.write(str(i)) , это заменить ее следующим: file.write(str(i) "n") .

Ответ №4:

Это вызвано "w " в file=open(‘test.txt’,‘w ’) . Это должно сработать, если вы замените "w " на " a ". Это связано с тем, что w переопределяет файл, поэтому числа записываются, но сразу же заменяются следующим числом, в результате чего остается только последнее число. a добавляет в файл, чтобы вы получили все цифры от 1 до 4096 в test.txt. В качестве примечания вы забыли закрыть файл, что может привести к проблемам позже. Именно так вы должны предпочтительно написать код:

 for i in range(1,4097):
    with open("text.txt", "a ") as file:
        file.write(f"n{i}")
 

Это лучше, потому что он автоматически закрывает файл после запуска всего, что находится в блоке with. Вы также можете написать file.close() в конце, вместо того чтобы делать это, но для этого потребуется еще одна строка кода.
f'n{i} убедитесь, что появилась новая строка, прежде чем будет напечатан следующий номер.

Комментарии:

1. правильно, я понял. Исправлены кавычки.