Как читать "хорошо" из файла в Python - PullRequest
0 голосов
/ 10 марта 2019

Мне нужно прочитать файл, который всегда имеет один и тот же формат.

Поскольку я знаю, что он имеет тот же формат, я могу читать readline () и tokenize.Но я думаю, что есть способ прочитать это больше, как бы сказать, "красиво для глаз".

Файл, который я должен прочитать, имеет следующий формат:

Nom NMS-01
MAC AAAAAAAAAAA
UDPport 2019
TCPport 9129

Я просто хочу по-другому прочитать его, не используя токены, если это возможно

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Ваш вопрос, по-видимому, подразумевает, что «токенизация» является каким-то таинственным и сложным процессом. Но на самом деле, то, что вы пытаетесь сделать, это в точности токенизация .

Вот совершенно правильный способ прочитать файл, который вы показываете, разбить его на токены и сохранить в структуре данных:

def read_file_data(data_file_path):
    result = {}
    with open(data_file_path) as data_file:
        for line in data_file:
            key, value = line.split(' ', maxsplit=1)
            result[key] = value
    return result

Это было не сложно, не было много кода, ему не нужна сторонняя библиотека, и с ней легко работать:

data = read_file_data('path/to/file')
print(data['Nom'])  # prints "NMS-01"

Теперь эта реализация делает много предположений о структуре файла. Среди прочего, предполагается:

  • Весь файл структурирован как пары ключ / значение
  • Каждая пара ключ / значение помещается на одной строке
  • Каждая строка в файле является парой ключ / значение (без комментариев или пустых строк)
  • Ключ не может содержать пробелы
  • Значение не может содержать символы новой строки
  • Один и тот же ключ не появляется несколько раз в файле (или, если он появляется, допустимо, чтобы последнее заданное значение было единственным возвращенным)

Некоторые из этих предположений могут быть ложными, но все они верны для предоставленной вами выборки данных.

В более общем плане: если вы хотите проанализировать некоторые виды структурированных данных, вам необходимо понять структуру данных и то, как значения отделены друг от друга. Вот почему были изобретены распространенные форматы структурированных данных, такие как XML, JSON и YAML (среди многих других!). Если вы знаете язык , который вы анализируете, tokenization - это просто код, который вы пишете, чтобы сопоставить язык с текстом вашего ввода.

0 голосов
/ 10 марта 2019

Панды делают много волшебных вещей, так что, может быть, это красивее для вас?

import pandas as pd

pd.read_csv('input.txt',sep = ' ',header=None,index_col=0)

Это дает вам фрейм данных, которым вы можете манипулировать дальше:

0       1
Nom     NMS-01
MAC     AAAAAAAAAAA
UDPport 2019
TCPport 9129
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...