2016-09-12 7 views
1

各ファイルに対して変更される特定の文字列の大きなグループのテキストファイル(160K)を検索しようとしています。私は検索する文字列の値を持つディレクトリ内のすべてのファイルを持つテキストファイルを持っています。基本的に私は、ファイル名、文字列、文字列が存在する場合は1、そうでない場合は0を与える新しいテキストファイルを作成するためにpythonを使用したいと思います。Python 3.xを使用して別のファイル内の別の文字列を検索する方法

これまで使用してきたアプローチは、テキストファイルから辞書を作成することです。そこから私は立ち往生しています。ここで私が擬似コードで表現していることは次のとおりです。

ありがとうございます。大量のテキストが通過するので、いくらか効率的である必要があります。ここで

私は私はあなたの質問を理解すると、辞書は、各ファイルには、各ファイルを読むことができますあまりにも大きくない場合

d = { 
"file1.txt": "widget", 
"file2.txt": "sprocket", #etc 
} 

を文字列にファイル名を関連付ける

d = {} 
with open('ibes.txt') as f: 
    d = dict(x.rstrip().split(None, 1) for x in f) 

import os 

for filename in os.listdir(os.getcwd()): 
    string = d.get(filename, "[email protected]#$%^&*") 
    if string in open(filename, 'r').read(): 
     with open("ibes_in.txt", 'a') as out: 
      out.write("{} {} {}\n".format(filename, string, 1)) 
    else: 
     with open("ibes_in.txt", 'a') as out: 
      out.write("{} {} {}\n".format(filename, string, 0)) 

答えて

0

になってしまったものです

for filename in os.listdir(os.getcwd()): 
    string = d[filename] 
    if string in open(filename, 'r').read(): 
     print(filename, string, "1") 
    else: 
     print(filename, string, "0") 

この例ではprintを使用していますが、代わりにファイルに書き込むことができます。ループoutfile = open("outfile.txt", 'w')前に、出力ファイルを開き、代わりに一方の印刷使用

outfile.write("{} {} {}\n".format(filename, string, 1)) 

の各ファイルがメモリに簡単に収まるように大きすぎるSearch for string in txt file Python

+0

Iで説明したように、あなたはmmapを使用することができます文字列= dict [ファイル名] TypeError: '型'オブジェクトは添え字ではありません – prizmracer11

+2

これはdictの名前にdictを使用しないでください。 –

+0

これは、キーがないために行を変更しなければならないことを修正しました。私はdictをコピーして貼り付けました。 d.get(filename、 "!@#$%^&*")を使用して、ランダムな文字列が欠けているキーをマークするのは単なる方法です。私はまた、open(filename、 'r')のif文字列から読み込みにa()を追加しなければなりませんでした。 – prizmracer11

関連する問題