2013-10-08 5 views
2

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

file_str = input ("Enter a file name: ") 

while True: 
    try: 
     file_obj = open(file_str, 'r') 
     break 
    except IOError: 
     file_str = input("'Invalid file name' Enter a file name: ")   
prefix = input("Master File Prefix?") 
old = prefix 
old += ".old.txt" 
new = prefix 
new += ".new.txt" 
oldMaster = open(old,"w") 
newMaster = open(new,"w") 

oldMaster = file_obj 
newMaster = file_obj 

for line_str in file_obj: 
    line = line_str 

    oldMaster.write(line) 
+2

Этот код даже не запускается, потому что вы используете неопределенную переменную 'file_obj'. – BrenBarn

+0

Что такое 'file_obj' и что он там делает? –

+0

Вы можете проверить, что файл был успешно открыт? – John

ответ

4

Вы не закрываете файл, вы должны послать commit сигнал для того, чтобы записать в файл.

Попробуйте использовать with, который opens и закрывает дескриптор файла.

with open(old,"w") as oldMaster,open(new,"w") as newMaster: 
+0

Как мне это сделать без использования? – Kecoey

+0

OMG Я люблю тебя. Я закрыл файлы в конце, и это сработало. Спасибо огромное! – Kecoey

0

В коде file_obj существует только в while. Попробуйте распечатать его значение после while.

Итак после открытия файла:

>>> oldMaster = open('\users.csv',"w") 

взгляд на то, что oldMaster равна:

>>> oldMaster 
<_io.TextIOWrapper name='\users.csv' mode='w' encoding='cp1251'> 

тогда вы ovewrite oldMaster с переменной file_obj, которая имеет несколько значений, но нет файла:

>>> oldMaster='smthelse' 
>>> oldMaster 
'smthelse' 

So oldMaster contai n smthelse, нет файл.

Я думаю, вы должны удалить while.

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