#python
#python
Вопрос:
Моя цель — создать программу на python, которая будет получать вводимые пользователем данные для открытия определенного файла, копировать содержимое этого файла в новый файл (с именем пользователя), а затем удалять все пробелы и цифры из нового файла.
Я успешно копирую содержимое моего файла ‘sequence’ во вновь созданный файл ‘newsequence’. Все разваливается в моем втором цикле ‘for’, когда я затем пытаюсь манипулировать файлом ‘newsequence’.
Я столкнулся с ошибкой, из-за которой он не мог прочитать ‘newsequence’ (возможно, потому, что он думал, что я хочу, чтобы он читал переменную, а не содержимое файла?). Я подумал, что преобразование файла в строку может помочь (хотя, признаюсь, я думал, что это должно было сработать и без этого), поэтому в строке 7 я преобразовал ‘newsequence’ в строку.
Это, по крайней мере, привело к завершению запуска программы без возникновения ошибки «io.UnsupportedOperation: не читается», но это все равно неправильно. Мой выходной файл идентичен исходному файлу ‘sequence’, за исключением того, что он содержит дополнительную строку в конце, которая просто гласит: «8». Откуда берется это «8» и какие изменения мне нужно внести в свой код, чтобы заставить его делать то, что я хочу, чтобы он делал?
Я очень новичок в программировании, поэтому, вероятно, совершаю ряд глупых ошибок. Спасибо за любую помощь, которую вы можете мне оказать.
sequence = open(input("Choose sequence file: "))
name = input('Enter name of new text file, without .txt: ') '.txt'
with open(name, 'a') as newsequence:
for line in sequence:
newsequence.write(line)
for line in str(newsequence):
result = ''.join(i for i in line if i.isdigit())
result = result.replace(" ","")
newsequence.write(result)
sequence.close()
newsequence.close()
Комментарии:
1. когда вы используете
with open(name, 'a') as newsequence:
then, вам не нужноnewsequence.close()
, потомуwith
что закроет этот файл.2.
open(..., 'a')
означает, что вы открываетеappend
, а не дляread
.3. вы не можете одновременно читать и записывать файл — файл использует указатель, чтобы запомнить, где он прекращает чтение или запись — вы должны переместить этот указатель на файл, чтобы начать чтение снова (или вам нужно снова открыть файл). Лучше делать все в одном цикле —
for line in sequence:
Ответ №1:
Поэтому я думаю, что вы совершаете ошибку, записывая в файл дважды без необходимости. Вместо того, чтобы записывать в файл, а затем пытаться прочитать его и отредактировать, почему бы вам не изменить файл во время расшифровки. Я бы изменил вашу функцию следующим образом:
sequence = open(input("Choose sequence file: "))
name = input('Enter name of new text file, without .txt: ') '.txt'
with open(name, 'w') as newsequence: # notice the `w` instead of the `a`
for line in sequence:
result = ''.join(i for i in line if i.isdigit())
result = result.replace(" ","")
newsequence.write(result)
sequence.close()
newsequence.close()
Комментарии:
1.
with ... as newsequence
означает, что вам не нужноclose()
это делать впоследствии. Для согласованности, возможноsequence
, файл также следует открывать вwith
инструкции (вы можете открыть несколько файлов в однойwith
инструкции).
Ответ №2:
Почему бы вам не сделать это за один for
цикл?
Не тестировалось:
file_in = open(input("Choose sequence file: "))
name = input('Enter name of new text file, without .txt: ') '.txt'
with open(name, 'a') as file_out:
for line in file_in:
line = ''.join(i for i in line if i.isdigit())
line = line.replace(" ","")
file_out.write(line)
file_in.close()
Вы не можете читать (построчно) и записывать (построчно) в одном файле — вы перезапишете старый текст, прежде чем прочитаете его.