Извлечение данных из текстового файла в Python - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть текстовый файл с высокоуровневой структурой следующим образом:

CATEG:
DATA1
DATA2
...
DATA_N
CATEG:
DATA1
....

Я хочу открыть этот текстовый файл и проанализировать каждый экземпляр CATEG:, разделяя содержимое между ними.Тем не менее, я испытываю большое раздражение по поводу метода open и того, как он работает с новыми строками в каждой строке во время чтения.

, то есть использование f = open('mydata.txt', 'r'), а затем f.readlines() приводит к большому количеству ненужногоНовые операторы строки и делает его раздражает разделить на структуру данных выше.У кого-нибудь есть советы?К сожалению, это набор данных, который раздражает.

Ответы [ 5 ]

0 голосов
/ 02 декабря 2018

Напишите небольшую обертку вокруг вашей последовательности, которая удаляет все символы новой строки:

def newline_stripper(seq):
    for s in seq:
        # or change this to just s.rstrip() to remove all trailing whitespace
        yield s.rstrip('\n')

Затем оберните свой файловый объект им при переходе к итерации:

with open('text_file.txt') as f:
    for line in newline_stripper(f):
        # do something with your now newline-free lines

Это сохранитчтение файла по очереди, вместо того, чтобы читать все сразу, что будет делать read().splitlines().

0 голосов
/ 02 декабря 2018

Попробуйте:

with open('text.txt') as file:
text = file.read()
text = text.replace('\n', ' ')
s = text.split('CATEG:')
s = [x.strip() for x in s if x != '']
print(s)
0 голосов
/ 02 декабря 2018

Попробуйте прочитать (). Splitlines ().

Например:

from io import StringIO

def mkString():
    return StringIO("""CATEG:
        DATA1
        DATA2
        ...
        DATA_N
        CATEG:
        DATA1
        ....""")

mkString().read().splitlines()
0 голосов
/ 02 декабря 2018

Вы можете использовать itertools.groupby:

from itertools import groupby

with open(filename) a f:
    categs = [list(group) for (key, group) in groupby(f.splitlines(), key='CATEG:')]
0 голосов
/ 02 декабря 2018

Попробуйте следующий код:

with open('mydata.txt') as f:
  for line in f:
    line = line.strip(' \t\r\n')  # remove spaces and line endings
    if line.ednswith(';'):
      pass # this is category definition
    else:
      pass # this is data line
...