首頁 > 軟體

Python 結構化字串中提取資料詳情

2022-08-19 22:02:15

前言

在許多自動化任務中,我們都需要從已知格式結構化的輸入文字中提取相關資訊。例如,我們可能需要在一段電影評論資料中提取觀影時間、電影名、評分等資訊,以便儲存後進行進一步分析。在本節中,我們將以提取電影評論資料資訊為例講解如何從結構化字串中提取資料。

從結構化字串中提取資料

假設我們具有以下結構的電影評分資料,我們需要解析儲存觀影時間、電影名、評分等資訊:

[<Timestamp>] - MOVIE ID: <movie id> - MOVIE NAME: <movie name> - SCORE: <score of the movie>

例如,一條可能的電影評分記錄如下所示:

[2022-08-01T11:58:41.504054] - MOVIE ID: 00015 - MOVIE NAME: Inception - SCORE: 8.5

其中,我們使用標準格式表示時間和日期,這在計算機中廣泛應用。

字串解析

首先,匯入所需庫,並給出所需解析的使用者對電影的評分記錄:

>>> import delorean
>>> from decimal import Decimal
>>> text = '[2022-08-01T11:58:41.504054] - MOVIE ID: 00015 - MOVIE NAME: Inception - SCORE: 8.5'

將評分記錄使用 split() 方法拆分為多個部分,我們使用 “-” 作為分隔符拆分每個元素,將評分記錄拆分為 4 部分——時間戳、電影 ID、電影名和電影評分,便於之後將它們解析為正確的型別:

>>> divided_text = text.split(' - ')
>>> divided_text
['[2022-08-01T11:58:41.504054]', 'MOVIE ID: 00015', 'MOVIE NAME: Inception', 'SCORE: 8.5']
>>> timestamp, movie_id, movie_name, score = divided_text

將時間戳解析為 datetime 物件。由於在評分記錄中時間戳包含在方括號中,為了正確解析時間戳,需要去掉括號,然後使用 delorean 模組將其解析為日期時間物件:

>>> timestamp = delorean.parse(timestamp.strip('[]'))
>>> timestamp
Delorean(datetime=datetime.datetime(2022, 1, 8, 11, 58, 41, 504054), timezone='UTC')

將 movie_id 解析為整數。為了解析電影 ID,需要使用冒號作為分隔符拆分 movie_id,然後,將最後一個元素解析為整數:

>>> movie_id = int(movie_id.split(':')[-1])
>>> movie_id
15

將評分解析為 Decimal 型別。為了解析電影評分,我們同樣使用冒號作為分隔符拆分 score,並將其解析為十進位制字元物件 Decimal (這是由於此值解析為浮點型別會改變精度):

>>> score = Decimal(score.split(':')[-1])
>>> score
Decimal('8.5')

為了便於解析和聚合,我們可以將所解析的資料組合在一起成為一個物件。例如,我們可以通過在 Python 程式碼中定義一個類,來方便的解析和聚合結構化字串中的資料:

class Movie(object):
    def __init__(self, timestamp, movie_id, movie_name, score):
        self.timestamp = timestamp
        self.movie_id = movie_id
        self.movie_name = movie_name
        self.score = score
        
    def __repr__(self):
        return '<Movie ({}, {}, {})>'.format(self.timestamp, self.movie_id, self.movie_name, self.score)

    @classmethod
    def parse(cls, text):
        '''
        Parse from a text with the format
        [<Timestamp>] - MOVIE ID: <movie id> - MOVIE NAME: <movie name> - SCORE: <score of the movie>
        to a Movie object
        '''
        divided_text = text.split(' - ')
        timestamp, movie_id, movie_name, score = divided_text
        timestamp = delorean.parse(timestamp.strip('[]'))
        movie_id = int(movie_id.split(':')[-1])
        movie_name = movie_name.split(':')[-1]
        score = Decimal(score.split(':')[-1])
        return cls(timestamp=timestamp, movie_id=movie_id, movie_name=movie_name, score=score)

定義 Movie 類完成後,我們可以使用以下方式方便的對評分記錄進行解析:

>>> Movie.parse(text)
<Movie (Delorean(datetime=datetime.datetime(2022, 1, 8, 11, 58, 41, 504054), timezone='UTC'), 15,  Inception)>

到此這篇關於Python 結構化字串中提取資料詳情的文章就介紹到這了,更多相關Python 提取資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com