2014-09-24 3 views
1

У меня есть файл журнала 1GB (.txt) в следующем формате,питон большой файл разборе

[ABC] [12.45] [bla bla bla] [12345] 
[DEF] [12.45] [bla bla bla] [12345] 

Я пытаюсь разобрать его в массивы для каждого из []. До сих пор я пробовал numpy.genfromtxt, а также читал строки за строкой, открывая файл. numpy дает некоторое MemoryError с 1GB-файлом. метод lin-by-line занимает около 35 секунд.

Есть ли какая-либо другая библиотека или способ закрепить разбор?

Reading построчно:

with open(filePath) as f: 
    for line in f: 
     splits = findall('\[(.*?)\]', line) 
     A.append(splits[0].strip()) 
     B.append(datetime.datetime.strptime(splits[2], '%H:%M:%S.%f')) 
     C.append(splits[4]) 
+0

Знаете ли вы, каков размер каждой строки в байтах? –

+0

@ RafaelBarros: Нет, это будет меняться. – user2626431

+1

Для чего вам это нужно? Вам нужен произвольный доступ? Вы используете каждую линию? – Veedrac

ответ

1

Вы можете ускорить значительно разборе с помощью str.split вместо re.findall.

with open('input.txt') as f: 
    for line in f: 
     splits = line.split('] [') 
     A.append(splits[0][1:]) 
     B.append(splits[1]) 
     C.append(splits[2]) 
     D.append(splits[3][:-1]) 
+0

Спасибо! это был преступник. – user2626431

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