2016-05-20 3 views
0

Я имею дело с большим txt-файлом, есть общие 8050000 строк. Краткий пример линий:Почему моя программа занимает так много времени?

usedfor zipper fasten_coat 
usedfor zipper fasten_jacket 
usedfor zipper fasten_pant 
usedfor your_foot walk 
atlocation camera cupboard 
atlocation camera drawer 
atlocation camera house 
relatedto more plenty 

Я пишу код питона читать строки, и хранить их в качестве словаря. Мой код:

dicCSK = {} 
for line in finCSK: 
    line=line.strip('\n') 
    try: 
     r, c1, c2 = line.split(" ") 
    except ValueError: print line 
    if c1 not in dicCSK.keys(): 
     dicCSK[c1]= [] 
    str1 = r+" "+c2 
    dicCSK[c1].append(str1) 

Однако, я запустил программу более 20 часов, она все еще работает. Так лучше ли хранить их в словаре? Мой код слишком медленный. Благодарю.

+7

Я голосующий, чтобы закрыть этот вопрос как не относящийся к теме, потому что он просит просмотреть код, поэтому он принадлежит http://codereview.stackexchange.com –

+0

Кроме того: я бы выбрал другой инструмент (и хранилище формат) для этой конкретной работы - детали, в зависимости от того, что вы намереваетесь сделать * с созданным словарем. –

+0

Помимо [2]: 'collections.defaultdict (list)' будет избегать необходимости в 'c1 в dicCSK.keys()' check. –

ответ

5

Это ошибка: он генерирует список всех ключей в словаре и затем сканирует его.

if c1 not in dicCSK.keys(): 
    dicCSK[c1]= [] 

Вместо:

if c1 not in dicCSK: 
    dicCSK[c1] = [] 

Или вместо этого использовать defaultdict, чтобы избежать проверки.

dicCSK = collections.defaultdict(list) 
for line in finCSK: 
    line=line.strip('\n') 
    try: 
     r, c1, c2 = line.split(" ") 
    except ValueError: 
     print line 
    dicCSK[c1].append(r+" "+c2) 

Кроме того, вероятно, вы также хотите dicCSK[c1].append(r+" "+c2) заявления под else п о try/except в противном случае он будет выполнять даже тогда, когда есть ValueError исключения.

+0

Благодарим вас за ответ, сейчас он быстрее. Однако моя программа завершилась ошибкой: «MemoryError». Потому что у меня четыре больших файла. Это происходит, когда программа начинает работать со вторым файлом. – flyingmouse

+0

Мой компьютер имеет память 8 ГБ – flyingmouse

+0

@flyingmouse OK, но это звучит как отдельная проблема. Если бы этот ответ отвечал на вопрос, который вы задали удовлетворительно, возможно, согласитесь с ним и начните новый вопрос с новой проблемой (при условии, что это ясно и достаточно конкретно). –

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