Pythonでテキストから必要な情報のみをエクセルに出力

★テキストに始点・終点の目印をつけておくことで、自動でエクセルに出力することができます。

前回(こちら)の続きです。

テキストファイルに出力した情報から、「適時開示日付」「会社名」「前任監査人」「新任監査人」といった、集計に必要な情報だけをエクセルに出力するプロセスを、何らか自動化できないかとPythonで組んでみました。

結果、どうしても(現時点の私の知見では)出力情報はひとつひとつ目で見て判断する必要があると考え、出力する情報は目視の上、始点と終点にそれぞれ「[」と「]」を入力し、後はPythonにこの範囲内のテキストをエクセルに出力させることにしました。(※「#」で始まる行はプログラムには関係ない説明文です。なので、プログラム自体は30行もありません。)

アプリケーションをまたぐ単純作業は、Pythonで自動化できる余地が大きいように思います。

今思いつくのは「発送先リストからのメールの自動配信&回答状況の自動集計&回答内容の自動集計」などですが、今後もPythonで小回りの利く効率化プログラムが作れないか、勉強を続けたいと思います。


# 前提

# pyファイルと同じ階層にテキストファイル群を保管

# pyファイルと同じ階層に、出力用として「output.xlsx」を保管(sheet1の名称のシートが必要)

# テキストファイル名をリスト化用

import glob

# マッチメソッド(m.startで始点を取得)

# re.finditerで条件に合う文字列の有無をサーチ

import re

# エクセル操作用(開く・書き込む・閉じる)

import openpyxl

# テキストファイル名を取得してリスト化

listA = list(glob.glob(‘*.txt’))

print(listA)

for i in range(len(listA)):

    b = open(listA[i])

    s = b.read()

    b.close()

    list1= [m.start() for m in re.finditer(‘\[‘, s)]

    list2= [m.start() for m in re.finditer(‘\]’, s)]

    print(list1)   

    print(list2)

# []で括った箇所をリスト化するためにlist3をブランクでセットしておく

    list3=[]

    n=0

    for z in range(len(list1)):

# テキスト(s)から、指定された始点(list1 +1)から終点(list2)までの文字列を返す

# 返したものをlist3に追加

        z = s[list1[n]+1:list2[n]]

        list3.append(z)

        n += 1

# list3の最後には、抽出元となったファイル名称を追加(エクセル一覧と元のファイルとの照合用)

    list3.append(listA[i])

    print(list3)

# エクセルを開く

    wb = openpyxl.load_workbook(‘output.xlsx’)

    ws = wb[‘Sheet1’]

    y = 0

# 作業回数は[の数プラス、ファイル名称ということでlen()+1となる

    for y in range(len(list1) + 1):

# i+1で、ファイルごとに行が変わるように指示(行への指示)

# y+1で、入力後右セルに移動するように指示(列への指示)

        ws.cell(i + 1,y + 1,value = list3[y])

# list3からエクセルへの書き込みごとに保存(どこでエラーが発生したか特定可能にしたいから)

        wb.save(‘output.xlsx’)

    i += 1


ご参考になれば幸いです。

竹内由多可