2017-01-31 4 views
0

Я работаю над проектом, который включает большие данные, хранящиеся в файлах .txt. Моя программа работает немного медленнее. Причина в том, что я думаю, что моя программа анализирует файл неэффективно.Python -Оптимизировать разбор файлов

образец файла:

X | Y | Weight 
-------------- 

1 1 1 
1 2 1 
1 3 1 
1 4 1 
1 5 1 
1 6 1 
1 7 1 
1 8 1 
1 9 1 
1 10 1 

PARSER КОД:

def _parse(pathToFile): 
    with open(pathToFile) as f: 
    myList = [] 
    for line in f: 
     s = line.split() 
     x, y, w = [int(v) for v in s] 
     obj = CoresetPoint(x, y, w) 
     myList.append(obj) 
    return myList 

Эта функция вызывается NumberOfRows/N раз, когда я только разобрать небольшую порцию данных для обработки до тех пор, никаких линий не оставил. Мой .txt - это несколько Giga Bytes.

Я, очевидно, вижу, что я повторяю NumberOfLines раз в цикле, и это огромное узкое место и BAD. Это приводит меня к вопросу:

Вопрос: Что такое правильный подход для разбора файла, что будет наиболее эффективным способом сделать это и будет организовывать данные по-разному в .txt прикрутить парсер? если да, то как мне организовать data внутри file?

ответ

1

В Python у вас есть библиотека, чтобы сделать это под названием Pandas. Импорт данных с пандами следующим образом:

import pandas as pd 
df = pd.read_csv('<pathToFile>.txt') 

В случае, если файл слишком велик, чтобы быть загружены все вместе в память, можно перебрать части данных и загружать их по одному в то время. Here довольно хорошее сообщение в блоге, которое может помочь вам в этом.

+0

У меня не может быть весь файл в основной памяти, поскольку он очень большой, не приведет ли это к основной памяти? –

+0

да, это займет его в памяти. Насколько оно большое? Если вам действительно нужно, вы должны пойти в распределенные материалы, такие как RDD от Spark, но это займет некоторое время. Как насчет выборки данных? посмотрите на этот вопрос: http://stackoverflow.com/questions/22258491/read-a-small-random-sample-from-a-big-csv-file-into-a-python-data-frame, вы можете зацикливать над частями данных, чтобы не загружать все в память сразу. – lorenzori

Смежные вопросы