Python 結(jié)構(gòu)化字符串中提取數(shù)據(jù)詳情
前言
在許多自動(dòng)化任務(wù)中,我們都需要從已知格式結(jié)構(gòu)化的輸入文本中提取相關(guān)信息。例如,我們可能需要在一段電影評(píng)論數(shù)據(jù)中提取觀影時(shí)間、電影名、評(píng)分等信息,以便存儲(chǔ)后進(jìn)行進(jìn)一步分析。在本節(jié)中,我們將以提取電影評(píng)論數(shù)據(jù)信息為例講解如何從結(jié)構(gòu)化字符串中提取數(shù)據(jù)。
從結(jié)構(gòu)化字符串中提取數(shù)據(jù)
假設(shè)我們具有以下結(jié)構(gòu)的電影評(píng)分?jǐn)?shù)據(jù),我們需要解析存儲(chǔ)觀影時(shí)間、電影名、評(píng)分等信息:
[<Timestamp>] -?MOVIE ID: <movie id>?- MOVIE NAME: <movie name>?- SCORE: <score of the movie>
例如,一條可能的電影評(píng)分記錄如下所示:
[2022-08-01T11:58:41.504054] - MOVIE ID: 00015?- MOVIE NAME: Inception?- SCORE: 8.5
其中,我們使用標(biāo)準(zhǔn)格式表示時(shí)間和日期,這在計(jì)算機(jī)中廣泛應(yīng)用。
字符串解析
首先,導(dǎo)入所需庫,并給出所需解析的用戶對(duì)電影的評(píng)分記錄:
>>> import delorean >>> from decimal import Decimal >>> text = '[2022-08-01T11:58:41.504054] - MOVIE ID: 00015 - MOVIE NAME: Inception - SCORE: 8.5'
將評(píng)分記錄使用 split() 方法拆分為多個(gè)部分,我們使用 “-” 作為分隔符拆分每個(gè)元素,將評(píng)分記錄拆分為 4 部分——時(shí)間戳、電影 ID、電影名和電影評(píng)分,便于之后將它們解析為正確的類型:
>>> 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將時(shí)間戳解析為 datetime 對(duì)象。由于在評(píng)分記錄中時(shí)間戳包含在方括號(hào)中,為了正確解析時(shí)間戳,需要去掉括號(hào),然后使用 delorean 模塊將其解析為日期時(shí)間對(duì)象:
>>> timestamp = delorean.parse(timestamp.strip('[]'))
>>> timestamp
Delorean(datetime=datetime.datetime(2022, 1, 8, 11, 58, 41, 504054), timezone='UTC')將 movie_id 解析為整數(shù)。為了解析電影 ID,需要使用冒號(hào)作為分隔符拆分 movie_id,然后,將最后一個(gè)元素解析為整數(shù):
>>> movie_id = int(movie_id.split(':')[-1])
>>> movie_id
15將評(píng)分解析為 Decimal 類型。為了解析電影評(píng)分,我們同樣使用冒號(hào)作為分隔符拆分 score,并將其解析為十進(jìn)制字符對(duì)象 Decimal (這是由于此值解析為浮點(diǎn)類型會(huì)改變精度):
>>> score = Decimal(score.split(':')[-1])
>>> score
Decimal('8.5')為了便于解析和聚合,我們可以將所解析的數(shù)據(jù)組合在一起成為一個(gè)對(duì)象。例如,我們可以通過在 Python 代碼中定義一個(gè)類,來方便的解析和聚合結(jié)構(gòu)化字符串中的數(shù)據(jù):
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 類完成后,我們可以使用以下方式方便的對(duì)評(píng)分記錄進(jìn)行解析:
>>> Movie.parse(text) <Movie (Delorean(datetime=datetime.datetime(2022, 1, 8, 11, 58, 41, 504054), timezone='UTC'), 15, ?Inception)>

到此這篇關(guān)于Python 結(jié)構(gòu)化字符串中提取數(shù)據(jù)詳情的文章就介紹到這了,更多相關(guān)Python 提取數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
xshell會(huì)話批量遷移到mobaxterm的工具(python小工具)
這篇文章主要介紹了xshell會(huì)話批量遷移到mobaxterm的工具,使用方法也超級(jí)簡單,本文通過python代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Python strip lstrip rstrip使用方法
Python中的strip用于去除字符串的首位字符,同理,lstrip用于去除左邊的字符,rstrip用于去除右邊的字符。這三個(gè)函數(shù)都可傳入一個(gè)參數(shù),指定要去除的首尾字符。2008-09-09
Python列表list常用內(nèi)建函數(shù)實(shí)例小結(jié)
這篇文章主要介紹了Python列表list常用內(nèi)建函數(shù),結(jié)合實(shí)例形式總結(jié)分析了Python列表list常見內(nèi)建函數(shù)的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-10-10
Python之多線程退出與停止的一種實(shí)現(xiàn)思路
這篇文章主要介紹了Python之多線程退出與停止的一種實(shí)現(xiàn)思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
python+matplotlib實(shí)現(xiàn)鼠標(biāo)移動(dòng)三角形高亮及索引顯示
這篇文章主要介紹了Python+matplotlib實(shí)現(xiàn)鼠標(biāo)移動(dòng)三角形高亮及索引顯示,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
python?logging多進(jìn)程多線程輸出到同一個(gè)日志文件的實(shí)戰(zhàn)案例
這篇文章主要介紹了python?logging多進(jìn)程多線程輸出到同一個(gè)日志文件的實(shí)戰(zhàn)案例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Python自動(dòng)化測(cè)試框架之unittest使用詳解
unittest是Python自動(dòng)化測(cè)試框架之一,提供了一系列測(cè)試工具和接口,支持單元測(cè)試、功能測(cè)試、集成測(cè)試等多種測(cè)試類型。unittest使用面向?qū)ο蟮乃枷雽?shí)現(xiàn)測(cè)試用例的編寫和管理,可以方便地?cái)U(kuò)展和定制測(cè)試框架,支持多種測(cè)試結(jié)果輸出格式2023-04-04
Python實(shí)現(xiàn)批量導(dǎo)入1000條xlsx數(shù)據(jù)
本文主要介紹了Python實(shí)現(xiàn)批量導(dǎo)入1000條xlsx數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

