2013-03-20 3 views
-1

Пожалуйста, покажите мне, как я мог бы эффективно анализировать имена и хранить их в память из текста, как это:Эффективно разбор простого текста

SMITH   1.006 1.006  1 
JOHNSON  0.810 1.816  2 
WILLIAMS  0.699 2.515  3 
JONES   0.621 3.136  4 
BROWN   0.621 3.757  5 
DAVIS   0.480 4.237  6 
MILLER   0.424 4.660  7 
... 

Этих текстовый файл содержит более 80K строк. Мне нужны только имена для случайного выбора; Источник файла вы можете найти здесь dist.all.last

ответ

2

Линии пробельные разделены, просто цикл над файлом, а также использовать .split():

with open('dist.all.last') as inputfile: 
    names = [line.split()[0] for line in inputfile if line.strip()] 

Если вам нужно выбрать один имя случайным образом из того, вы можете использовать:

import random 
with open('dist.all.last') as inputfile: 
    name = None 
    for i, line in enumerate(inputfile): 
     r = random.randint(0, i) 
     if not r and line.strip(): 
      name = line.split()[0] 

, который делает выбор, не сохраняя более одной строки за раз в памяти.

+0

спасибо! Я новичок в python;) – Edward83

+0

Первоначально я думал, что это будет иметь проблемы с именами с пробелами в них, но кажется, что их просто нет: они пишут «VANROSSUM», например .. – DSM

+1

@DSM: Я проверил первый. :-) –

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