2017-09-10 27 views
1

grepを使用してユニコード文字列を検索するにはどうすればよいですか?ユニコード文字をgrepするには?

文字列「\ xfe \ n \ xfe」の出現回数を数えようとしています。私は以下のようにしてPythonでこれを見つけることができます:

open(filename).read().count('\xfe\n\xfe') 

これは数千の一致を見つけます。

しかし、これによりファイル全体がメモリにロードされるため、システムのメモリよりも大きなファイルを検索しようとするとクラッシュします。

だから私は経由でのgrepと同等のものをやろうとしている:

grep -P -c "\xfe\n\xfe" filename 

それは素晴らしいですが、ほぼ0のメモリを消費するが、私は同じファイルでこれを実行するにもかかわらず、それが0の一致が見つかりました。私の構文が間違っていますか?

+0

'grep'は行ベースで動作します。 –

+0

ファイル全体をPythonのメモリに読み込む必要はありません。あるいは、あなたのファイルと同じエンコーディングを使用している(少なくとも、うまくいけば)エスケープしないで文字を貼り付けることができます。つまり 'grepþ'が動作します。 – pvg

+0

私は160000行(40000件の一致を含む)のファイルをテストしました。この場合、Pythonはgrepに対してずっと高速になります。 @モーゼスKoledoyeのソリューションは正常に動作するはずです – RomanPerekhrest

答えて

1

ファイル全体をメモリに読み込む必要はありません。ファイルを繰り返し処理して、各瞬間に行のペアを取りながら、その文字列の出現を数えることができます。

関連する問題