Python извлекает данные из txt файла и игнорирует заголовки - PullRequest
0 голосов
/ 05 июля 2018

У меня есть текстовый файл, который представляет узлы и ребра между узлами. Узел-часть содержит некоторую дополнительную информацию. Файл выглядит так:

@nodes
label    characteristic A    characteristic B
1        vfn                 5
2        ksdv                625
3        asn                 0

@edges
1 3
2 3

Я могу извлечь информацию, если у меня есть один файл для узлов и один для ребер без заголовков без проблем, но как я могу извлечь информацию, если файл выглядит как пример? Поскольку скрипт должен работать для всех файлов узловых ребер в этом формате, я не могу просто вырезать определенные строки, мне нужно как-то найти @ -symbol и вырезать вдоль этой линии. В дополнение к этому мне нужно вырезать заголовок узла с характеристиками, в то время как у края раздела нет заголовка.

Любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 05 июля 2018
with open("nodes.txt", "r") as f:
    for line in f.readlines():
        if '@' in line:
            # skip the header if you want here
            continue
        data = line.split()
0 голосов
/ 05 июля 2018

Это то, что вы ищете?

Результатом являются два списка: узлы, ребра

from __future__ import print_function

with open("nodes-edges.txt") as g:
    data = g.read().replace('@nodes\n', '').split('\n')[1:]

    is_node = True
    nodes = []
    edges = []

    for item in data:
        if item == '@edges':
            item = ''
            is_node = False

        if item:
            list_elements = [element for element in item.split(' ') if element != '' ]

            if is_node:
                nodes.append(list_elements)
            else:
                edges.append(list_elements)

    print('nodes: ', nodes)
    print('edges: ', edges)
0 голосов
/ 05 июля 2018

Это то, что вы ищете?

file = open(“testfile.txt”, “r”) 
for line in file:
    if line[:1] != "@":
    print line or whatever
...