Python 結構化字符串中提取數據詳情
前言
在許多自動化任務中,我們都需要從已知格式結構化的輸入文本中提取相關信息。例如,我們可能需要在一段電影評論數據中提取觀影時間、電影名、評分等信息,以便存儲後進行進一步分析。在本節中,我們將以提取電影評論數據信息為例講解如何從結構化字符串中提取數據。
從結構化字符串中提取數據
假設我們具有以下結構的電影評分數據,我們需要解析存儲觀影時間、電影名、評分等信息:
[<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 提取數據內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python爬蟲入門教程01之爬取豆瓣Top電影
- python中的時區問題
- 利用PyQt5制作一個豆瓣電影信息查看器
- 一個入門級python爬蟲教程詳解
- python編程簡單幾行代碼實現視頻轉換Gif示例