Pythonでテキスト抽出-for文失敗

noteでPythonの記事を公開しております。今回は失敗したやつを書いて行きたいと思います。Pythonのnoteのマガジンは蓄積していくと探しづらいと思うので失敗したなーというのはlogwに残しておこうかと思います。
テキストの抽出
Pythonでテキストを抽出をしてCSVファイルを作成するというのを公開しました。基本的には正規表現で持ってくるというのになるのですが、for文とかで回せないかなと思っていて色々試してみました。結論失敗だなーとなったのでそれをメモとして残しておきます。
該当テキスト
該当のテキストは以下になります
[text]
整理番号:322636940 日付:令和2年4月15日
番号通知
平成 30年5月 2日
赤しそ ねぎ
提出人 544506015206
参考人 青しそ 大葉 様
提出日 昭和16年 2月 29日
提出番号 通知番号
PYT/MQL4827/793784 通知256488
このファイルは適当に作ったサンプルファイルとなります。
Pythonで使うサンプルとなります。
以上
このファイルが間違って届いたら破棄してください。
[/text]
※このファイルは僕が適当に作った存在しないファイルです。色々とおかしいとこがあるファイルです
このテキストから、必要な箇所を正規表現で持ってきてCSVにするというのをしました。
長いコード
1つずつ取り出すとなるとコードがどうしても長くなってしまいます。そこでできればまとめてとれないかなーと思っていました。例えば 提出人~提出日 までは殆ど似たような感じなのでループでとれるのではないかな?と思っていました。コードの削減にもなるので
試してみた
実際にコードを探していたら、合ったので試してみました
[python]
outfile = ""
with open(path, "r") as lines:
for line in lines:
line=" ".join(line.split())
line = line.replace(' ', ':')
line = line.replace(' ', ':')
line = line.replace('^\n',"")
if outfile=="":
m = re.search("提出人",line)
if m:
outfile = "sample_extraction_list.txt".format()
fo = open(outfile, 'a', newline = "")
print(line)
#fo.write(line)
#fo.write("\n")
else:
print(re.sub("提出番号","",line))
fo.write(re.sub("提出番号","",line))
fo.write("\n")
m = re.match("提出番号",line)
if m:
fo.close()
outfile=""
[/python]
参考サイト:python3で特定の範囲の文字を抽出したい
実行するとこんな感じになります
[c]
提出人:544506015206
参考人:青しそ:大葉:様
提出日:昭和16年:2月:29日
[/c]
問題が多い
ちゃんと取得しております。「:」は最終的にCSVにするときに「,」に置き換わり物になります。実際は提出人:、参考人:、提出日:のみが「:」が正しく他は入ってはいけないのですが入ってしまいました。
空白行がある
空白の行があります。本来は空白の行もなしの状態にしたいのですが消せませんでした。
この記事に関する技術サポート・ご相談
「手順通りにいかない」「自社環境への構築を代行してほしい」など、
インフラ・サーバー周りでハマった際はお気軽にご相談ください。
※ Googleフォームへ移動します(初回相談無料)
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS