Удаление строк в файле csv с помощью python
У меня есть csv, в котором около 1000 строк. Мне нужно удалить все строки ниже 100 (т.е. начиная со 101). Но при этом мне нужно сохранить в исходной папке только укороченный csv. Как это можно сделать стандартными средствами python?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Алгоритм:
- переименовываем исходный файл, добавляя расширение ".bkp":
- создаём новый файл с именем исходного файла
- в цикле читаем строки по одной из исходного файла и записываем в новый
- когда счетчик доходит до 100 выходим из цикла
from pathlib import Path
filename = "/path/to/filename.txt"
bkp_filename = filename + ".bkp"
Path(filename).rename(bkp_filename)
fn_in = Path(bkp_filename)
fn_out = Path(filename)
N = 10
with open(fn_in) as fin, open(fn_out, "w") as fout:
for i, line in enumerate(fin):
if i == N:
break
fout.write(line)
UPD: для удобства можно также воспользоваться itertools.islice (как написал в комментариях @Stanislav Volodarskiy):
from itertools import islice
...
with open(fn_in) as fin, open(fn_out, "w") as fout:
for line in islice(fin, N):
fout.write(line)
Если вы всегда работаете с маленькими кусками файлов, т.е. такими, которые гарантировано не вызовут проблем с памятью, то можно сделать чуть короче:
with open(fn_in) as fin, open(fn_out, "w") as fout:
data = "".join(list(islice(fin, N)))
fout.write(data)