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('^\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=""
参考サイト:python3で特定の範囲の文字を抽出したい
実行するとこんな感じになります
提出人:544506015206 参考人:青しそ:大葉:様 提出日:昭和16年:2月:29日
問題が多い
ちゃんと取得しております。「:」は最終的にCSVにするときに「,」に置き換わり物になります。実際は提出人:、参考人:、提出日:のみが「:」が正しく他は入ってはいけないのですが入ってしまいました。
空白行がある
空白の行があります。本来は空白の行もなしの状態にしたいのですが消せませんでした。
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS