任意のディレクトリ内にある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となっている。