#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. Удалить — это не то же самое, что перезаписать; последнее намного проще, но расточительно (из-за пространства).