#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. правильно, я понял. Исправлены кавычки.