Как прочитать текстовый файл с тегами в Python? - PullRequest
0 голосов
/ 30 ноября 2018

Я новичок в Python.У меня есть текстовый файл , как показано ниже, с тысячами документов (от id = 1 до id = 10000):

<doc id=1>
    <label>1</label>
    <summary>
        I think you are right
    </summary>
    <short_text>
        I think you are right. Because I have once read the book in the same topic.
    </short_text>
</doc>

Есть ли какой-нибудь удобный способ прочитать текстовый файл и сохранитьсодержание в инстансах?

class ShortText:
    def __init__(self, my_id, human_label, summary, short_text):
        self.id = my_id         
        self.human_label = human_label    
        self.summary = summary 
        self.short_text = short_text
    def __str__(self):
        '''
        For printing purposes.
        '''
        return '%d\t%s\t%s\t%s' % (self.id, self.human_label, self.summary, self.short_text)

def load_file(filename):
    #retrieve the original text 
    with codecs.open(filename, encoding='utf-8') as f:
        data = f.read()
    #how to get values from tags and put it below?
        my_id = 
        human_label = 
        summary = 
        short_text = 
        instances[my_id] = ShortText(my_id, human_label, summary, short_text)
    return instances

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Попробуйте это.Вы можете увидеть символы \ n, это просто новые строки и могут быть удалены третьей строкой кода (при необходимости):

from bs4 import BeautifulSoup
d = BeautifulSoup(data)
d = d.text.replace('\n','')
0 голосов
/ 30 ноября 2018

Я разработал это BeautifulSoup.

import codecs
from bs4 import BeautifulSoup   

class ShortText:
    def __init__(self, my_id, human_label, summary, short_text):
        self.id = my_id         
        self.human_label = human_label    
        self.summary = summary 
        self.short_text = short_text
    def __str__(self):
        '''
        For printing purposes.
        '''
        return '%d\t%d\t%s\t%s' % (self.id, self.human_label, self.summary, self.short_text)

def load_file(filename):
    #retrieve the original text 
    with codecs.open(filename, encoding='utf-8') as f:
        data = f.read()
    #use beautifulsoup to get tag attributes and elements
    soup = BeautifulSoup(data)
    tags = soup.find_all('doc')
    #store in a dictionary with ShortText Instances as values
    instances = {}
    my_id = 0
    for t in tags:
        human_label = int(t.human_label.get_text())
        summary = t.summary.get_text().replace("\n", "").replace(" ", "")
        short_text = t.short_text.get_text().replace("\n", "").replace(" ", "")
        instances[my_id] = ShortText(my_id, human_label, summary, short_text)
        my_id +=1

    return instances

Спасибо, ребята!

0 голосов
/ 30 ноября 2018

Если вы можете обрабатывать данные как фрагмент XML, вы можете попробовать использовать библиотеку lxml:

test.py:

from lxml import etree

a = etree.fromstring("<test>Hello</test>")

print a.text

результат

>>> python test.py
Hello

чтение из файла:

>>> tree = etree.parse(some_file_or_file_like_object)

https://lxml.de/tutorial.html#the-fromstring-function

https://lxml.de/tutorial.html#parser-objects

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