Чтение и запись в файл - PullRequest
0 голосов
/ 13 июня 2011

У меня есть XML-файл, который содержит недопустимый символ, я перебираю файл, удаляя символ из всех строк и сохраняю строки в списке. Теперь я хочу записать те же строки обратно в файл и переписать то, что уже есть.

Я пробовал это:

file = open(filename, "r+")
#do stuff

Который только добавляет результаты в конец файла, я хотел бы перезаписать существующий файл.

А это:

file = open(filename, "r")
#read from the file
file.close()

file = open(filename, "w")
#write to file
file.close()

Это дает мне ошибку Bad File Descriptor.

Как я могу читать и писать в один и тот же файл?

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

Вы можете переписать список строк с помощью функции writelines.

with open(filename, "r") as f:

    lines = f.readlines()

#edit lines here

with open(filename, "w") as f:

    f.writelines(lines)
0 голосов
/ 14 июня 2011

Причина, по которой вы все время добавляете в конец файла, состоит в том, что вам нужно искать начало файла, чтобы записать свои строки.

with open(filename, "r+") as file:
    lines = file.readlines()

    lines = [line.replace(bad_character, '') for line in lines]

    file.seek(0)
    file.writelines(lines)
    file.truncate()         # Will get rid of any excess characters left at the end of the file due to the length of your new file being shorter than the old one, as you've removed characters.

(решил сам использовать синтаксис менеджера контекста.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...