2014-11-14 4 views
0

Что здесь не так в этом коде: я просто передаю существующий файл, а затем удаляю его с помощью os.remove(), а затем записываю его с другим контентом. Но файл показывает предыдущий контент, не обновленный. Отрывок здесь:что здесь не так в этом коде python?

#!/usr/bin/env python 
import sys 
import os 

arg1=sys.argv[1] 
_list = ['a', 'b', 'c'] 
os.remove(arg1) 
hd = open(arg1, 'w') 
for line in _list: 
    hd.write(line) 
hd.close() 

Допустим, мой файл содержит следующее содержание: output1:

p 
q 
r 
s 

После удаления файла (os.remove()), воссоздавая тот же файл и перезаписывания его содержание из списка. Ожидаемый результат:

a 
b 
c 

Но я получаю output1 вместо ожидаемого результата.

+3

Какой результат вы здесь? – Totem

+0

то же, что и файл перед удалением. –

+0

его кажется прекрасным, если файл создан до выполнения программы – Hackaholic

ответ

2

Вы можете просто хотите, чтобы открыть файл и записать текущее содержимое без удаления файла первый:

with open(arg1, "w") as f: 
    for line in _list: 
     f.write(line) 

Вот как open() работает.

Первый аргумент - это строка, содержащая имя файла. Второй аргумент - это другая строка, содержащая несколько символов, описывающих способ использования файла. mode может быть «r», когда файл будет считан только «w» только для записи (существующий файл с тем же именем будет удален), а «a» открывает файл для добавления; любые данные, записанные в файл, автоматически добавляются в конец. 'r +' открывает файл для чтения и записи. Параметр mode не является обязательным; 'r' будет приниматься, если он опущен.

+0

Да, это сработает. Но почему мы не получаем ожидаемый результат в моем случае? –

+0

Я не уверен, но, возможно, это связано с этим с [документами python] (https://docs.python.org/2/library/os.html#os.remove): в Unix, запись в каталоге удаляется, но хранилище, выделенное файлу, недоступно до тех пор, пока исходный файл больше не будет использоваться. –

+0

Я использую ubuntu 12.04 –

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