ホームページ >バックエンド開発 >Python チュートリアル >Python で大きなテキスト ファイル内の文字列の存在を効率的に確認するにはどうすればよいですか?

Python で大きなテキスト ファイル内の文字列の存在を効率的に確認するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-12 12:45:11891ブラウズ

How Can I Efficiently Check for a String's Presence in Large Text Files in Python?

テキスト ファイルに文字列が含まれているかどうかを検査する

テキスト ファイル内の特定の文字列の存在を確認するシナリオを考えてみましょう。それが識別されたら、特定のアクション (X) を実行する必要があります。それ以外の場合は、代替アクション (Y) が続く必要があります。ただし、この目的を達成することを目的としたコード スニペットは一貫して True を返し、その正確性について困惑させられます。

この誤った動作の原因は、if ステートメント内に条件チェックが欠如していることです。適切な実装は次のようになります。

if 'blabla' in line:

ただし、テキスト ファイルが比較的大きい場合は、ファイル全体を文字列に読み取り、それを使用して検索を実行する方が効率的である可能性があります。以下に例を示します。

with open('example.txt') as f:
    if 'blabla' in f.read():
        print("true")

さらに大きなファイルの場合は、mmap.mmap() を利用して、コンテンツ全体をメモリにロードする代わりに、基礎となるファイルを使用する「文字列のような」オブジェクトを作成できます。

import mmap

with open('example.txt') as f:
    s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
    if s.find('blabla') != -1:
        print('true')

Python 3 では、mmap が bytearray オブジェクトに似ているため、検索文字列を次のように変更する必要があることに注意してください。バイト オブジェクト:

import mmap

with open('example.txt', 'rb', 0) as file, \
     mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
    if s.find(b'blabla') != -1:
        print('true')

さらに、mmap で正規表現を利用して、大文字と小文字を区別しないマッチングなど、より高度な検索機能を利用できます:

import mmap
import re

with open('example.txt', 'rb', 0) as file, \
     mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
    if re.search(br'(?i)blabla', s):
        print('true')

以上がPython で大きなテキスト ファイル内の文字列の存在を効率的に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。