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にするときに「,」に置き換わり物になります。実際は提出人:、参考人:、提出日:のみが「:」が正しく他は入ってはいけないのですが入ってしまいました。

空白行がある

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

個人支援・寄付について

サイトラボではBuildreeの開発などのため、現在個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではkyashというサービスをつかっております。ビットコインでも受け付けております。