2017-09-13 17 views
2

私は何をしようとしていますか?Python 3.6.1 | Regex特殊文字を含むファイルを検索する

最大のファイルのサイズが数MB以上ないという、様々なサイズと拡張子の25K数字の周りに、Windowsのファイルシステム上のファイルのセット(主にフラットテキストファイルのうち、アルファベット文字列のリストの検索を実行するには)

私はこれを達成するために何をしましたか?

for each_file in files: 
    file_read_handle = open(each_file,"rb") 
    file_read_handle.seek(0) #ensure you're at the start of the file 
    first_char = file_read_handle.read(1) #get the first character 
    if first_char: 
     file_read_content_mappd = mmap.mmap(file_read_handle.fileno(), 0, access=mmap.ACCESS_READ) 
     if re.search(br'(?i)T_0008X_WEB', file_read_content_mappd): 
      file_write_content = ('Text T_0008X_WEB found in {}'.format(each_file)) 
      file_write_handle.write(file_write_content)  
      file_write_handle.write("\n") 
file_write_handle.close() 

バイナリモードで開かれているファイルのうち、ハードコードテキスト検索のためのうまくコード作品(ラインT_0008X_WEBを参照)のこの作品は、( "RB")を避けるためにUnicodeDecodeError : 'charmap'コーデックは位置776のバイト0x9dをデコードできません:文字は未定義のマップエラーになります。

issues-

  1. を、次の直面している、this- if re.search('br\'(?i)' + regex_search_str_byte + '\'', file_read_content_mappd):のような変数にハードコードされた値を置き換えることによって、値のリストを検索しようとしたときただし、使用

    re.search('br\'(?i)' + regex_search_str + '\'', file_read_content_mappd):は、エラーが発生しました: ファイルがバイナリであり、使用するとテキストが文字列型

  2. にある検索:re.search(regex_search_str_byte, file_read_content_mappd):は問題を得た:も、正規表現の文字ので、一致が見つからなかったBR '(?I)もバイト変換された検索テキスト

リクエスト指導開いたバイナリモードで、値のリストについては、バイト変換されたテキストの正規表現検索を実行する方法上の一部と考えられていましたファイルを読む?

+0

もしre.search(str.encode(regex_search_str)、file_read_content_mappd)が必要なように見えます。 –

+0

@WiktorStribiżew:そのような場合、正規表現フラグ** br '(?i)**をどのように含めるべきですか? 2つ目の問題で同じことをしようとしました。つまり、regex flags_を含む_entireの値を変数_regex_search_str_に保持しようとしました。その文字列をbyteに変換して_regex_search_str_byte_に保存しました。私はあなたがUTF - 8オプションに文字列エンコードで同じことを示唆していると思うが、この場合、それは一致を返しませんでした、私はバイトを変換したテキストも検索テキストの一部である正規表現のフラグと見なしています。これに特有の提案がより役に立ちます。 – Lakshman

+1

're.search(str.encode(regex_search_str)、file_read_content_mappd、flags = re.I)'の場合。フラグは、引数として 're.search'メソッドに渡すことができます。'br'は文字列リテラルの修正に使用され、変数を使用しているので不要です。 'regex_search_str'はUTF8文字列であると仮定します。 [この質問](https://stackoverflow.com/questions/7585435/best-way-to-convert-string-to-bytes-in-python-3)を参照してください。 –

答えて

1

使用

re.search(regex_search_str_byte, file_read_content_mappd, flags=re.I) 

re.Iフラグre.searchメソッドへの引数として渡すことができます。 br接頭辞は、文字列リテラルの変更に使用され、変数を使用しているため必要ありません。

関連する問題