Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで構造化文字列から必要なデータを抽出するにはどうすればよいですか?


はじめに...

構造化文字列からrequireデータ/フィールドを抽出するためのいくつかのメソッドを紹介します。これらのアプローチは、入力構造の形式が既知の形式である場合に役立ちます。

その方法..

1.アプローチを理解するために1つのダミーフォーマットを作成しましょう。

Report: <> - Time: <> - Player: <> - Titles: - Country: <>

レポート:Daily_Report-時間:2020-10-16T01:01:01.000001-プレーヤー:フェデラー-タイトル:20-国:スイス

report = 'Report: Daily_Report - Time: 2020-10-10T12:30:59.000000 - Player: Federer - Titles: 20 - Country: Switzerland'

2.レポートから最初に気付いたのは、「-」という区切り文字です。先に進み、「-」でレポートを解析します

fields = report.split(' - ')
name, time, player , titles, _ = fields

print(f"Output \n *** The report name {name} generated on {time} has {titles} titles for {player}. ")

出力

*** The report name Report: Daily_Report generated on Time: 2020-10-10T12:30:59.000000 has Titles: 20 titles for Player: Federer.

3.これで、Report:、Time:、Player:などの不要なラベルがまだ表示されているため、出力は期待どおりではありません。

# extract only report name
formatted_name = name.split(':')[1]

# extract only player
formatted_player = player.split(':')[1]

# extract only titles
formatted_titles = int(titles.split(':')[1])

# extract only titles
new_time = time.split(': ')[1]

print(f"Output \n {formatted_name} , {new_time}, {formatted_player} , {formatted_titles}")

出力

Daily_Report , 2020-10-10T12:30:59.000000, Federer , 20

4.これで、タイムスタンプはISO形式になりました。これは、必要に応じて分割したり、そのままにしておくことができます。タイムスタンプフィールドを分割する方法を紹介します。

from datetime import datetime
formatted_date = datetime.fromisoformat(new_time)

print(f"Output \n{formatted_date}")

出力

2020-10-10 12:30:59
  • 次に、これらすべての手順を1つの機能にまとめます。

def parse_function(log):
"""
Function : Parse the given log in the format
Report: <> - Time: <> - Player: <> - Titles: - Country: <>
Args : log
Return : required data
"""
fields = log.split(' - ')
name, time, player , titles, _ = fields

# extract only report name
formatted_name = name.split(':')[1]

# extract only player
formatted_player = player.split(':')[1]

# extract only titles
formatted_titles = int(titles.split(':')[1])

# extract only titles
new_time = time.split(': ')[1]

return f"{formatted_name} , {new_time}, {formatted_player} , {formatted_titles}"

if __name__ == '__main__':
report = 'Report: Daily_Report - Time: 2020-10-10T12:30:59.000000 - Player: Federer - Titles: 20 - Country: Switzerland'
data = parse_function(report)
print(f"Output \n{data}")

出力

Daily_Report , 2020-10-10T12:30:59.000000, Federer , 20

6.解析モジュールを使用して、少し単純にすることができます。ご覧のとおり、フォーマットはテンプレートを作成します。解析モジュールを使用すると、これをもう少し簡単に行うことができます。

まず、-pip install parse

で解析モジュールをインストールします。
from parse import parse
report = 'Report: Daily_Report - Time: 2020-10-10T12:30:59.000000 - Player: Federer - Titles: 20 - Country: Switzerland'

# Looking at the report, create a template
template = 'Report: {name} - Time: {time} - Player: {player} - Titles: {titles} - Country: {country}'

# Run parse and check the results
data = parse(template, report)
print(f"Output \n{data}")

出力

<Result () {'name': 'Daily_Report', 'time': '2020-10-10T12:30:59.000000', 'player': 'Federer', 'titles': '20', 'country': 'Switzerland'}>

7.シンプルなワンライナーで、テンプレートを定義することでログからデータを抽出できます。それでは、個々の値を抽出しましょう。

print(f"Output \n {data['name']} - {data['time']} - {data['player']} - {data['titles']} - {data['country']}")

出力

Daily_Report - 2020-10-10T12:30:59.000000 - Federer - 20 - Switzerland

結論:

ログファイルから必要なデータを解析するためのいくつかの方法を見てきました。テンプレートを定義し、解析モジュールを使用して必要なデータを抽出することをお勧めします。


  1. Pythonでウィキペディアのデータを抽出する方法は?

    この記事では、Pythonを使用してウィキペディアのデータを抽出する方法を説明します。 Pythonは、ウェブサイトからメタ情報を取得するためのウェブスクレイパーの作成に広く使用されています。 この記事では、ウィキペディアAPIとライブラリを使用して、ウィキペディアのソースURLからデータを取得します。 APIは、指定されたURLからデータをフェッチするのに役立ちます。次に、指定されたURLでメソッドを呼び出し、画面に情報を出力します。 ウィキペディアからデータを抽出するには、最初にウィキペディアライブラリをインポートする必要があります。 Pythonで「pipinstallwikiped

  2. Web サイトから Excel にデータを自動的に抽出する方法

    データの抽出 Web ページから Excel ワークシートへの自動 (データの収集と更新) は、ジョブによっては重要な場合があります。 Excel を使用すると、Web ページからデータを収集できます。これは、データ分析ジョブに Excel を使用するユーザーにとって最もよく使用される Excel 機能の 1 つです。金融アナリスト会社で働いている場合は、分析のために毎日の株価を Web サイトから Excel ブックに取得またはインポートする必要がある場合があります。この記事では、ウェブサイトからデータを抽出して Excel にする方法を紹介します。 簡単な手順で自動的に。 Web サイトか