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

noteでPythonの記事を公開しております。今回は失敗したやつを書いて行きたいと思います。Pythonのnoteのマガジンは蓄積していくと探しづらいと思うので失敗したなーというのはlogwに残しておこうかと思います。

テキストの抽出

Pythonでテキストを抽出をしてCSVファイルを作成するというのを公開しました。基本的には正規表現で持ってくるというのになるのですが、for文とかで回せないかなと思っていて色々試してみました。結論失敗だなーとなったのでそれをメモとして残しておきます。

該当テキスト

該当のテキストは以下になります

整理番号:322636940  日付:令和2年4月15日
番号通知
                       平成 30年5月 2日
                           赤しそ ねぎ
提出人   544506015206 
参考人   青しそ 大葉 様 
提出日   昭和16年 2月 29日 
提出番号                  通知番号
PYT/MQL4827/793784    通知256488
このファイルは適当に作ったサンプルファイルとなります。
Pythonで使うサンプルとなります。
以上
このファイルが間違って届いたら破棄してください。

※このファイルは僕が適当に作った存在しないファイルです。色々とおかしいとこがあるファイルです

このテキストから、必要な箇所を正規表現で持ってきてCSVにするというのをしました。

長いコード

1つずつ取り出すとなるとコードがどうしても長くなってしまいます。そこでできればまとめてとれないかなーと思っていました。例えば 提出人~提出日 までは殆ど似たような感じなのでループでとれるのではないかな?と思っていました。コードの削減にもなるので

試してみた

実際にコードを探していたら、合ったので試してみました

outfile = ""
with open(path, "r") as lines:
for line in lines:
line=" ".join(line.split())
line = line.replace(' ', ':')
line = line.replace(' ', ':')
line = line.replace('^\
',"")
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("\
")
else:
print(re.sub("提出番号","",line))
fo.write(re.sub("提出番号","",line))
fo.write("\
")
m = re.match("提出番号",line)
if m:
fo.close()
outfile=""

参考サイト:python3で特定の範囲の文字を抽出したい

実行するとこんな感じになります

提出人:544506015206
参考人:青しそ:大葉:様
提出日:昭和16年:2月:29日

問題が多い

ちゃんと取得しております。「:」は最終的にCSVにするときに「,」に置き換わり物になります。実際は提出人:、参考人:、提出日:のみが「:」が正しく他は入ってはいけないのですが入ってしまいました。

空白行がある

空白の行があります。本来は空白の行もなしの状態にしたいのですが消せませんでした。