目的
Pythonで無駄な作業を減らして業務効率化を目指しましょう!
今回の内容は、正規表現を使用して、テキストファイルを読み込み、欲しい文章を抽出します。
テキストデータに限らず、ExcelやPDFなどにも応用可能です。
是非、この機会に勉強にしてみて下さい。
今回読み込むテキスト
日時:2022/01/01
名前:田中太郎
内容:Pythonでテキストファイルから欲しいデータを抽出する
抽出するデータ
Pythonでテキストファイルから欲しいデータを抽出する
実行結果
テキストファイルを読み込む
open()/ read()/ close()によるファイル読み込み
open():テキストファイルを読み込みモードで開く
read():ファイルの内容を読み込み、
close():開いたファイルを閉じる
# 保存先のパス情報
text_path = 'textの保存先のパス'
# textデータを開く
text_data = open(text_path,'r')
# textデータを読み込む
text_content = text_data.read()
# textデータを閉じる
text_data.close()
# 読み込んだtextデータを表示する
print(text_content)
open()関数について
テキストファイルを読み込む方法として下記の関数を使います。
open(読み込みたいファイル,第2引数)
読み込みモード
open(読み込みたいファイル’, ‘r’):テキストファイルの内容を読み込む
書き込みモード
open(‘読み込みたいファイル’, ‘w‘):既存のファイルを上書きして最初から書き直す
追記モード
open(‘読み込みたいファイル’, ‘a’):既存のファイルの末尾にテキストを追加する
基本的にOpen()を使用した場合は、Close()で閉じる必要があります。
特に、書き込みモードや追記モードの場合、閉じ忘れたままプログラムが異常終了するとファイルが壊れることがあるので注意して下さい!
# 保存先のパス情報
text_path = 'textの保存先のパス'
# 読み込みモード
text_data_read = open(text_path,'r')
text_data_read.close()
# 書き込みモード
text_data_write = open(text_path,'w')
text_data_write.close()
# 追記モード
text_data_add = open(text_path,'a')
text_data_add.close()
with構文を使用したテキストファイルの読み込み
Open関数とClose関数をセットで書くことは忘れることもあり、
面倒だと感じることがあると思います。
そんな時は、with構文を利用することで、自動的に閉じる処理も実行され、結果的にエラーを防ぐことが可能です。
with open(‘読み込みファイル’, ‘r’) as 任意の名前:
# 保存先のパス情報
text_path = 'textの保存先のパス'
with open(text_path, 'r') as text_data:
text_content = text_data.read()
print(text_content)
キーワードより文字列の抽出する
正規表現を使用した文字列の取得
re.compile(r’キーワード(.*))
今回使用したキーワードは’内容:’になります。
また、取得したい文字列は( )に指定した正規表現を従って取り出されます。
正規表現は、「なんでも」に相当する 「.*」を使用ています。
使用した正規表現
. ドット:ワイルドカードといい「改行以外の任意の1文字」
* アスタリスク:「直前のパターンを0回以上繰り返し」
# 正規表現モジュールをインポートする
import re
# re.copile()関数を呼び出しRegexオブジェクトを生成する
keyword_regex = re.compile(r'内容:(.*)')
# Regexオブジェクトのsearch()メソッドに、検索対象に文字列を渡すとMatchオブジェクトを返す
keyword_match = keyword_regex.search(text_content)
# Matchオブジェクトのgroup()メソッドを呼び出し、実際にマッチした文字列を取得する
print(keyword_match.group(1))
一般的な文字集合を表す短縮形
短縮形 | 意味 |
\d | 0〜9の数字 |
\D | 0〜9の数字以外 |
\w | 文字、数字、下線(単語のwordのw) |
\W | 文字、数字、下線以外 |
\s | スペース、タブ、改行(空白spaceのs) |
\S | スペース、タブ、改行以外 |
基本的な正規表現については、下記の記事を参考にしてみてください。
テキストファイルから欲しいデータを抽出する関数
最後に、今までの内容をまとめた関数を作成しました。是非、参考にしてみて下さい!
def keyword_match_countent(text_path,regex):
"""
指定パスに保存されたテキストのデータを読み込み
正規表現で指定した文字列を取得する
text_path:パス情報
regex:正規表現
"""
with open(text_path,'r') as text_data:
text_content = text_data.read()
keyword_regex = re.compile(r'{}'.format(regex))
keyword_match = keyword_regex.search(text_content)
keyword_match_countent = keyword_match.group(1)
return print(keyword_match_countent)
keyword_match_countent('/Users/Username/Python/text_extraction/Sample_text.txt','内容:(.*)')