Обработка большого файла

Effulgent

Новичок
Пользователь
Дек 19, 2024
1
1
1
Всем привет, у меня есть большой файл (от 150мб-5гб)
Изначально хотелось, весь файл обработать в питоне, через pandas, но к сожалению домашний ноутбук с 8гб ОЗУ не потянул и 8млн строк (out of memory), стационарный ПК с 8гб ОЗУ обработал 18млн строк за 15 мин - удаление дубликатов, удаление NAN строк, 2 фильтра и сохр результата (по-моему долго)
Решено было на питоне написать предобработку файла, а обрабатывать файл в БД
Каким образом мне можно быстро считать файл на примере 1.txt?
Тут же его обработать и перезаписать или нужно будет результат в новый файл сохранить?
Я так понимаю считать только так?
Код:
 with open(...) as f:
    for line in f:
        <do something with line>
 
  • Мне нравится
Реакции: Dr. Mundo

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
26
1
3
Для эффективной обработки большого файла предлагаю использовать потоковое чтение с помощью модуля pandas:

Python:
import pandas as pd

# Чтение и обработка файла чанками
chunk_size = 100000  # Размер чанка
output_file = "result.txt"

# Открываем файл для записи результатов
with open(output_file, 'w') as outfile:
    # Читаем входной файл чанками
    for chunk in pd.read_csv('1.txt', chunksize=chunk_size):
        # Обработка чанка
        chunk = chunk.dropna()  # Удаление NaN
        chunk = chunk.drop_duplicates()  # Удаление дубликатов
        # Применение фильтров
        chunk = chunk[chunk['column1'] > value1]
        chunk = chunk[chunk['column2'] < value2]
        
        # Запись обработанного чанка
        chunk.to_csv(outfile, index=False, header=False, mode='a')

Преимущества этого подхода:
  • Низкое потребление памяти
  • Возможность обработки файлов любого размера
  • Использование оптимизированных функций pandas
Для еще большей производительности можно использовать dask или vaex - библиотеки для работы с большими данными.
 

Форум IT Специалистов