Wie kann ich Stringvergleiche beschleunigen?Python

Python-Programme
Anonymous
 Wie kann ich Stringvergleiche beschleunigen?

Post by Anonymous »

Ich habe ein Python3-Skript, das bis zu vier Millionen tabulatorgetrennte Zeilen aus stdin liest. Das Skript sucht in einem bestimmten Feld jeder Zeile nach unterschiedlichen Textwerten und ruft eine andere Funktion auf, um die anderen Felder basierend auf der Textübereinstimmung in andere Dateien zu schreiben. Hier ist ein gekürztes Beispiel:

Code: Select all

for input_line in sys.stdin:
line_lst = input_line.split('\t')

if '"text-1' in line_lst[5]:
write_text_1(line_lst[1], line_lst[3], line_lst[2], line_lst[5])
elif '"text-2":' in line_lst[5]:
write_text_2(line_lst[1], line_lst[3], line_lst[2], line_lst[5])
elif '"other-text' in line_lst[5]:
write_other_text(line_lst[1], line_lst[3], line_lst[2], line_lst[5])
elif 'string-5' in line_lst[5]:
write_string_5(line_lst[1], line_lst[3], line_lst[2], line_lst[5])
Die Schreibfunktionen werden von parallelen untergeordneten Prozessen verarbeitet, um die E/A-Wartezeit auf ein Minimum zu reduzieren.
Ich habe das Skript über cProfile ausgeführt und die Verzögerungen scheinen innerhalb des Zeichenfolgenvergleichs zu liegen:

Code: Select all

  4482211   23.477    0.000  221.176    0.000 queues.py:369(put)
4482211   25.623    0.000  110.693    0.000 connection.py:181(send_bytes)
4482211   25.838    0.000   34.225    0.000 reduction.py:38(__init__)
4482211   43.656    0.000   43.656    0.000 {built-in method posix.write}
4482214    2.652    0.000    2.652    0.000 {method 'copy' of 'dict' objects}
4482232    5.735    0.000    5.735    0.000 {method 'update' of 'dict' objects}
8903380    3.625    0.000    3.625    0.000 {method 'end' of 're.Match' objects}
8903496   12.774    0.000   12.774    0.000 {method 'match' of 're.Pattern' objects}
Ich verwende nicht explizit den Vergleich regulärer Ausdrücke, daher vermute ich, dass der oben erwähnte Text „re.Pattern“ und „re.Match“ Python ist, der intern REs verwendet.
Gibt es eine schnellere Möglichkeit, mehrere unterschiedliche Zeichenfolgen zu vergleichen als eine if/elif-Struktur?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post