任意のディレクトリ内にあるtxtファイル全てを対象に任意の文字列を検索したい。
Terminal上で、grepすれば済む話だけど、検索したい文字列が大量にあって、個々の頻度も知りたい、、、と思ってスクリプトを書いた。
検索したい文字列を予め一行一表現で、txtファイルにまとめておいて、検索対象のディレクトリとは別に用意しておく。
結果は、タブ区切りでファイル名、文字列、頻度の順で出力。
以下、スクリプト
#!/usr/bin/python # -*- coding: utf-8 -*- import sys,os,re,glob argvs = sys.argv argc = len(argvs) file_list = sorted(glob.glob(sys.argv[1] + '*.txt')) with open(sys.argv[2] + ".txt", 'r') as DM: DMs = DM.read().splitlines() fw = open(sys.argv[3] + ".txt", 'w') fw.write("Filename" + "\t" + "DiscourseMarker" + "\t" + "Frequency" + "\n") for filename in file_list: fn = filename.strip("files/"".txt") with open(filename,'r') as f: files = f.read() for DMss in DMs: fre = len(re.findall(r'(\b)' + DMss + r'(\b)', files, re.IGNORECASE)) mydict = {} mydict[DMss] = fre for DMss in mydict: DMlist = DMss print(fn) print(mydict) fw.write(str(fn) + "\t" + str(DMlist) + "\t" + str(mydict[DMss]) + "\n") fw.close()
もうちょっと簡単に書けそうな気もするが、、、動くからいいや。
もともとは、Discourse Markerのリストを作って、そのリスト内の表現の頻度をファイル別で知りたかった。
ので、出力の見出しもFilename、DiscourseMarkerとなっている。