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