ここでgrepの回答を検索しましたが、回答が見つかりません。それらはすべて、ファイルからの文字列のリストではなく、ファイル内の文字列を検索しているように見えます。私はすでに機能する検索機能を持っていますが、grepはそれをはるかに高速に実行します。ファイルsn.txtに文字列のリストがあります(各行に1つの文字列があり、デリミネーターはありません)。別のファイル(Merge_EXP.exp)で一致する行を検索し、それを新しいファイルに書き出したい。私が検索しているファイルには50万行あるので、そこで数千を検索するにはgrepなしで数時間かかります。
Windowsのコマンドプロンプトから実行すると、数分で実行されます。
grep --file=sn.txt Merge_EXP.exp > Merge_EXP_Out.exp
Pythonからこれと同じプロセスを呼び出すにはどうすればよいですか?私はPythonで代替手段を本当に望んでいません。なぜなら、私はすでに機能するものを持っているのですが、時間がかかるからです。そのパフォーマンスを大幅に向上させることができると思わない限り、次のようになります。
def match_SN(serialnumb, Exp_Merge, output_exp):
fout = open(output_exp,'a')
f = open(Exp_Merge,'r')
# skip first line
f.readline()
for record in f:
record = record.strip().rstrip('\n')
if serialnumb in record:
fout.write (record + '\n')
f.close()
fout.close()
def main(Output_CSV, Exp_Merge, updated_exp):
# create a blank output
fout = open(updated_exp,'w')
# copy header records
f = open(Exp_Merge,'r')
header1 = f.readline()
fout.write(header1)
header2 = f.readline()
fout.write(header2)
fout.close()
f.close()
f_csv = open(Output_CSV,'r')
f_csv.readline()
for rec in f_csv:
rec_list = rec.split(",")
sn = rec_list[2]
sn = sn.strip().rstrip('\n')
match_SN(sn,Exp_Merge,updated_exp)