網站首頁 編程語言 正文
前言
在許多自動化任務中,我們都需要從已知格式結構化的輸入文本中提取相關信息。例如,我們可能需要在一段電影評論數據中提取觀影時間、電影名、評分等信息,以便存儲后進行進一步分析。在本節中,我們將以提取電影評論數據信息為例講解如何從結構化字符串中提取數據。
從結構化字符串中提取數據
假設我們具有以下結構的電影評分數據,我們需要解析存儲觀影時間、電影名、評分等信息:
[<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)>
原文鏈接:https://juejin.cn/post/7126795114503995423
相關推薦
- 2022-05-01 C#使用log4net打日志_C#教程
- 2022-10-31 Linux系統docker部署.net?core3.1的詳細步驟_docker
- 2022-06-14 Go操作redis與redigo的示例解析_Golang
- 2022-09-13 Android四大組件之Service服務詳細講解_Android
- 2022-02-09 linux下源碼包安裝的服務管理_Linux
- 2022-08-02 詳解C++中遞增運算符重載的實現_C 語言
- 2022-06-02 Python導包模塊報錯的問題解決_python
- 2022-10-24 C++??STL?_?Vector使用及模擬實現_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支