python - Упрощение большого файла Pajek .net - PullRequest
0 голосов
/ 29 октября 2018

У меня есть огромный сетевой файл Pajek (около 2 ГБ) и виртуальная машина Ubuntu с 32 ГБ ОЗУ. Загрузка этого графика в Networkx (read_pajek) убивает мой скрипт (Недостаточно памяти убито) . График взвешенный и ненаправленный.

Я пытаюсь разработать скрипт Python, который может упростить файл Pajek, перед загрузкой его в память или в огромный словарь . В частности, этот скрипт должен:

  1. удалить несколько строк и суммировать их значения;
  2. После этого удалите края, вес которых меньше порогового значения. Направление не важно.

Рассмотрим этот начальный пример файла Pajek:

*Vertices 5
1 node1
2 node2
3 node3
4 node4
5 node5
*Edges
1  2  1
1  2  4
2  3  10
5  4  2
4  5  3
3  4  2
3  1  1

Элементы в файле разделены вкладкой. При пороговом значении веса ребра 5 мне понадобится файл Pajek:

*Vertices 5
1 node1
2 node2
3 node3
4 node4
5 node5
*Edges
1  2  5
2  3  10
5  4  5

Можете ли вы помочь мне найти способ сделать это эффективно и в разумные сроки?


UPDATE

Пока лучшее, что я мог сделать, - это код, который, тем не менее, загружает ребра в память:

import re
with open('output.net', 'w', encoding = 'utf-8') as outfile:
    with open('input.net', encoding = 'utf-8') as input_data:
        for line in input_data:
            outfile.write(line)
            if line.strip() == '*Edges' or line.strip() == '*Arcs':  
                break

        explored = {}
        for line in input_data:
            SoTaWe= re.split(r'\t+', line.rstrip('\t\n'))
            SoTa = '\t'.join(sorted(SoTaWe[:-1]))

            try:
                explored[SoTa] += float(SoTaWe[2])
            except:
                explored[SoTa] = float(SoTaWe[2])

        for k,v in explored.items():
            if v > 4:
                riga = k + "\t" + str(v) + '\n'
                outfile.write(riga)
outfile.close()

Что-нибудь лучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...