Pythonで複数テキストファイル内の任意の文字列を含む行を抽出する方法のメモ
もっと効率のいい書き方が100%存在します、絶対。
今の実力がこれってことです。
全体コード
import glob #取得したいテキストファイルのパスを指定 files='C:/テキストファイルが置いてある場所のパス' #テキストファイルのパス一覧取得 file_name_edit=files+'/*.txt' files =glob.glob(file_name_edit) #テキストファイルが何個あるか確認(あとでfor文回すときに使う) len_flies=len(files) #抽出する関数作る def file_edit(path): path_new='C:/新しく作るテキストファイルの名前' with open(path,"r") as f: lines = f.readlines() lines_strip = [line.strip() for line in lines] #抽出する文字の行数を調べる list_rownum = [i for i,lines_s in enumerate(lines_strip) if '抽出する部分' in lines_s] int_list_rownum='' #手に入れた行を読み取れるように変換 for i in list_rownum: int_list_rownum=i #抽出する場所を行指定で読み込む with open(path) as f: lines01 = f.readlines()[int_list_rownum] #新しいテキストファイルに書き込む for i in lines01: with open(path_new, mode='a') as f: f.write(i) #for文で↑作った関数を回す for i in range(0,len_flies): file_edit(files[i])
解説
それでは解説していきます。
まずglob.glob()で対象パスにあるテキストファイルを取得する
import glob
globをインポート
#取得したいテキストファイルのパスを指定 files='C:/テキストファイルが置いてある場所のパス' #テキストファイルのパス一覧取得 file_name_edit=files+'/*.txt' files =glob.glob(file_name_edit) #テキストファイルが何個あるか確認(あとでfor文回すときに使う) len_flies=len(files)
正規表現ってやつ→*.txtとすることで対象のパスにあるすべてのテキストファイル一覧を取得できる。
関数作成
#抽出する関数作る def file_edit(path): path_new='C:/新しく作るテキストファイルの名前' with open(path,"r") as f: lines = f.readlines() lines_strip = [line.strip() for line in lines] #抽出する文字の行数を調べる list_rownum = [i for i,lines_s in enumerate(lines_strip) if '抽出する部分' in lines_s] int_list_rownum='' #手に入れた行を読み取れるように変換 for i in list_rownum: int_list_rownum=i #抽出する場所を行指定で読み込む with open(path) as f: lines01 = f.readlines()[int_list_rownum] #新しいテキストファイルに書き込む for i in lines01: with open(path_new, mode='a') as f: f.write(i)
ここを実際に作成するファイル名にしてください。
def file_edit(path): path_new='C:/新しく作るテキストファイルの名前'
list_rownum = [i for i,lines_s in enumerate(lines_strip) if '抽出する部分' in lines_s]
最後は自作関数を回しておしまい
#新しいテキストファイルに書き込む for i in lines01: with open(path_new, mode='a') as f: f.write(i)
こんな感じです。