659просмотров
45.4%от подписчиков
28 октября 2025 г.
Score: 725
🔤🔤🔤 🔤🔤🔤🔤🔤🔤 🔤 🔤🔤🔤🔤🔤🔤 🔤🔤🔤🔤🔤🔤🔤 🔠🔠🔠 Ключевая идея: не загружать файл целиком — читать потоками, обрабатывать и сразу сохранять результат. Pandas — удобный и практичный путь for chunk in pd.read_csv("huge.csv", chunksize=100_000, usecols=["id","amount"], dtype={"id":str}): chunk = chunk[chunk["amount"]>0] chunk.to_csv("out.csv", mode="a", header=first, index=False) first = False — указывайте usecols, dtype и не парсите даты по умолчанию. Низкоуровневый поток — минимальная память import csv
with open("huge.csv", newline='') as r, open("out.csv","w",newline='') as w: reader, writer = csv.DictReader(r), csv.DictWriter(w, fieldnames=["id","amount"]) writer.writeheader() for row in reader: writer.writerow({"id": row["id"], "amount": float(row["amount"])*0.012}) — идеально для простых построчных трансформаций и сжатия вывода. Когда что выбирать ➖ Табличные операции (группировки, агрегации) → pandas + chunksize.
➖ Простая строковая трансформация, минимальная память → csv + генераторы.
➖ CPU-heavy обработка → chunksize + multiprocessing (но не накапливайте чанки в памяти).
➖ Для долгосрочного хранения/аналитики → конвертация в Parquet. Быстрый чеклист перед запуском на полном файле 1️⃣. Протестировать на 1–10k строк.
2️⃣. Указать usecols и dtype.
3️⃣. Подобрать chunksize (50–200k — старт).
4️⃣. Не собирать результаты в списки; сразу писать на диск.
5️⃣. Логировать прогресс (номер чанка, время).