Как перезаписать или удалить строку в файле с помощью Python

#python #file

#python #файл

Вопрос:

Я получаю поток данных из итератора, и я хотел бы сбросить их в файл. Сейчас я делаю это, как показано ниже

 data_stream = range(100)    # for simplicity

with open('mydump', 'wb') as fh:
    for new_line in data_stream:
        new_line_data = str(new_line) 'n'
        fh.write(new_line_data.encode())
  

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

 with open('mydump', 'wb') as fh:
    for new_line in data_stream:
        new_line_data = str(new_line) 'n'
        fh.write(new_line_data.encode())
        if 'delete' in new_line:
            fh.seek(0)
            fh.delete() # how to delete first line (or nth line)
  

Комментарии:

1. Вы не можете. Перебирайте строки, скопируйте те, которые вы хотите, в другой файл. Не копируйте строки, которые вам не нужны.

2. Это также возможно сделать в исходном файле: найдите раздел после того, что должно быть удалено, прочитайте его и запишите обратно, начиная с того места, где начинается удаленный раздел. (Или просто перезапишите свой файл с результатом @alani.) Еще лучше: не записывайте их в первую очередь (если это возможно).

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

4. Проблема в том, что я работаю с потоками, и я не могу решить, что писать, а что нет. Итак, я думаю вернуться и удалить / перезаписать определенную строку пустыми пробелами

5. Удалить — это не то же самое, что перезаписать; последнее намного проще, но расточительно (из-за пространства).