2016-10-03 3 views
0

Моя цель - создать программу-питон, которая получит пользовательский ввод, чтобы открыть конкретный файл, скопировать содержимое этого файла в новый файл (названный пользователем) а затем удалите все пробелы и цифры из нового файла.Проблема с созданием нового файла и последующим манипулированием его содержимым

Я успешно копирую содержимое моего файла последовательности в только что созданный файл newsequence. Во втором цикле «for» все разваливается, когда я пытаюсь манипулировать файлом «newsequence».

Я столкнулся с ошибкой, когда он не мог прочитать «newsequence» (возможно, потому, что мне казалось, что я хочу, чтобы он читал переменную, а не содержимое файла?). Я думал, что преобразование файла в строку может помочь (хотя я признаю, что я думал, что он должен работать без этого), поэтому в строке 7 я преобразовал «newsequence» в строку.

Это, по крайней мере, запустило программу для завершения, не поднимая ошибку «io.UsupportedOperation: not readable», но это все еще не так. Мой выходной файл идентичен исходному файлу «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

, когда вы используете 'с open (name, 'a') как newsequence:' тогда вам не нужно 'newsequence.close()', потому что 'with' закроет этот файл. – furas

+1

'open (..., 'a')' означает, что вы открываете 'append', а не' read'. – furas

+0

вы не можете читать и писать файл в одно и то же время - использовать указатель файла, чтобы rembember, где он перестает читать или писать, - вы должны перенести этот указатель на файл, начинающий читать снова (или вам нужно снова открыть файл). Лучше делать everithing в одном цикле - 'для строки в последовательности:' – furas

ответ

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

'с ... как newsequence' означает, что вам не нужно« закрывать »() после этого. Для согласованности, возможно, файл 'sequence' должен также быть открыт в' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. – tripleee

+0

О, хороший звонок! Я сделаю редактирование. –

0

Почему бы вам не сделать это в одном 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() 

Вы не можете прочитать (строка за строкой) и запись (строка за строкой) в том же файле - вы перезаписать старый текст, прежде чем читать.

Смежные вопросы