Hướng dẫn python fastest way to search text file - python cách nhanh nhất để tìm kiếm tệp văn bản

Tôi đang thực hiện tìm kiếm văn bản trong một tệp TXT khá lớn (dòng 100k, 7mo) không lớn nhưng tôi cần rất nhiều tìm kiếm. Tôi muốn tìm một chuỗi đích và trả về dòng nơi nó xuất hiện. Tệp văn bản của tôi được định dạng để mục tiêu chỉ có thể xuất hiện trong một dòng.

Cách hiệu quả nhất là gì? Tôi thực hiện rất nhiều tìm kiếm vì vậy tôi muốn cải thiện tốc độ. Đây là mycode ngay bây giờ:

def lookup_line(target):
    #returns line of the target, or None if doesnt exist
    line=None
    dir=os.path.dirname(__file__)
    path=dir+'/file.txt'
    file=open(path,'r')
    while line==None:
        l=file.readline()
        l=unicode(l,'utf-8')
        if target in l:
            break
        if l=='': break #happens at end of file, then stop loop
    line=l
    if line=='':line=None #end of file, nothing has been found
    file.close()
    return line

Tôi sử dụng mã Python này cho ứng dụng Google AppEngine.

Thanks!

Hỏi ngày 10 tháng 8 năm 2010 lúc 13:22Aug 10, 2010 at 13:22

Hướng dẫn python fastest way to search text file - python cách nhanh nhất để tìm kiếm tệp văn bản

user375348user375348user375348

7491 Huy hiệu vàng6 Huy hiệu bạc23 Huy hiệu đồng1 gold badge6 silver badges23 bronze badges

2

  1. Tải toàn bộ văn bản trong RAM cùng một lúc. Đừng đọc từng dòng.
  2. Tìm kiếm mô hình trong blob. Nếu bạn tìm thấy nó, hãy sử dụng text.count('\n',0,pos) để có được số dòng.
  3. Nếu bạn không cần số dòng, hãy tìm EOL trước và tiếp theo để cắt dòng ra khỏi văn bản.

Vòng lặp trong Python là chậm. Tìm kiếm chuỗi rất nhanh. Nếu bạn cần tìm kiếm một số chuỗi, hãy sử dụng các biểu thức thường xuyên.

Nếu điều đó không đủ nhanh, hãy sử dụng một chương trình bên ngoài như grep.

Đã trả lời ngày 10 tháng 8 năm 2010 lúc 13:27Aug 10, 2010 at 13:27

Aaron Digullaaaron DigullaAaron Digulla

Phim huy hiệu vàng 315K104104 gold badges584 silver badges808 bronze badges

1

Nếu bạn đang tìm kiếm cùng một tệp văn bản nhiều lần, hãy xem xét lập chỉ mục tệp. Ví dụ: tạo một từ điển ánh xạ từng từ theo dòng nào của nó. Điều này sẽ mất một thời gian để tạo, nhưng sau đó sẽ thực hiện tìm kiếm O (1).

Nếu bạn đang tìm kiếm các tệp văn bản khác nhau hoặc không thể lập chỉ mục tệp vì một số lý do, bạn có thể sẽ không nhận được bất kỳ nhanh hơn thuật toán KMP.

EDIT: Chỉ mục tôi mô tả sẽ chỉ hoạt động cho các tìm kiếm từ duy nhất, không phải là tìm kiếm nhiều từ. Nếu bạn muốn tìm kiếm nhiều từ (bất kỳ chuỗi nào) thì có lẽ bạn sẽ không thể lập chỉ mục nó.

Đã trả lời ngày 10 tháng 8 năm 2010 lúc 13:31Aug 10, 2010 at 13:31

Niki Yoshiuchiniki YoshiuchiNiki Yoshiuchi

16.3k1 Huy hiệu vàng33 Huy hiệu bạc43 Huy hiệu đồng1 gold badge33 silver badges43 bronze badges

2

Đầu tiên, đừng giải mã rõ ràng byte.

from io import open

Thứ hai, hãy xem xét những thứ như thế này.

with open(path,'r',encoding='UTF-8') as src:
    found= None
    for line in src:
        if len(line) == 0: break #happens at end of file, then stop loop
        if target in line:
            found= line
            break
    return found

Điều này có thể được đơn giản hóa một chút để sử dụng return None hoặc return line thay vì break. Nó sẽ chạy một sợi tóc nhanh hơn, nhưng việc thay đổi hơn một chút khi có nhiều lợi nhuận.

Đã trả lời ngày 10 tháng 8 năm 2010 lúc 13:26Aug 10, 2010 at 13:26

S.LottS.LottS.Lott

377K79 Huy hiệu vàng503 Huy hiệu bạc773 Huy hiệu Đồng79 gold badges503 silver badges773 bronze badges

Làm thế nào về tốc độ tìm kiếm 10GB/s? https://www.codeproject.com/articles/5282980/fastest-fulltext-vector-scalar-exact-searcher

Cách hiệu quả nhất là gì?

Cách hiệu quả nhất là sử dụng các vectơ, nếu không có sẵn thì hàm memmem () vô hướng nhanh nhất bạn có thể nhận được, đã xảy ra rằng bài viết trên cho thấy cả hai hoạt động, bạn cần các tệp văn bản khổng lồ đang đi qua biến thể memmem () railgun_nyotengu ( ) Trở thành nguồn mở trong phạm vi công cộng là cách để đi.open-source in public domain is way to go.

Đã trả lời ngày 27 tháng 10 năm 2020 lúc 14:36Oct 27, 2020 at 14:36

GeorgigeorgiGeorgi

1387 Huy hiệu đồng7 bronze badges

1

Làm cách nào để tìm kiếm một tệp văn bản trong Python?

Cách tìm kiếm một chuỗi trong tệp văn bản..
Mở tệp trong chế độ đọc. Mở tệp bằng cách đặt đường dẫn tệp và chế độ truy cập vào hàm Open (). ....
Đọc nội dung từ một tập tin. Sau khi mở, hãy đọc tất cả nội dung của một tệp bằng phương thức Read (). ....
Tìm kiếm một chuỗi trong một tệp. ....
Dòng in và số dòng ..

Làm cách nào để tìm một từ cụ thể trong một tệp văn bản python?

Phương pháp 1: Tìm chỉ mục của chuỗi trong tệp văn bản bằng cách sử dụng readline () trong phương thức này, chúng tôi đang sử dụng hàm readline () và kiểm tra hàm find (), phương thức này trả về -1 nếu không tìm thấy giá trịvà nếu thấy nó trả về 0.Finding the index of the string in the text file using readline() In this method, we are using the readline() function, and checking with the find() function, this method returns -1 if the value is not found and if found it returns 0.

Làm thế nào để tôi nhanh chóng đọc một tập tin trong Python?

Python cách nhanh nhất để đọc một tệp văn bản lớn (một số GB)..
# Tệp: readline-example-3.py ..
File = Open ("Sample.txt").
Trong khi 1:.
dòng = file.ReadLines (100000).
Nếu không dòng:.
break..
Đối với dòng trong dòng:.
vượt qua # làm điều gì đó ** Văn bản mạnh mẽ **.

Làm thế nào để bạn tìm kiếm nhiều tệp trong Python?

Tạo một chức năng và thay đổi thư mục mà bạn muốn tìm kiếm văn bản.Sau danh sách đó, thư mục và in các tập tin.hệ điều hành.CHDIR (đường dẫn) - Thay đổi thư mục làm việc hiện tại thành đường dẫn được chỉ định.