2017-11-08 1 views
3

Ich habe eine folgende Problem, gibt es eine Funktion ist eine große Datei (wenige Mb) zu lesen, sieht der Inhalt wie:Funktion ist langsamer in separaten Datei

0x05 0x00 0x00 0x00 0xCF 0x00 0x00 0x00 ; .......... 
0xCF 0x00 0x00 0x00 0x22 0x00 0x00 0x00 ; ......"... 
0x51 0x84 0x07 0x00 0x02 0x00 0x01 0x00 ; ..Q....... 

Meine Funktion nur die Hex-Werte zu lesen hat und ";" mit folgenden Zeichen bis zum Ende der Zeile.

Daten aus der ersten Zeile, was ich brauchen, ist

"0x05 0x00 0x00 0x00 0xCF 0x00 0x00 0x00"

ich zwei Methoden versucht, ist man mit einer separaten Datei mit dieser Funktion

def ReadFileAsList(fileName): 

    fileName = "2Output.txt" 
    fileContentStr = "" 
    with open(fileName,'r') as f: 
     for line in f: 
      fileContentStr += line.split(';')[0] 

    fileContentList = fileContentStr.split() 
    return fileContentList 

und das zweite Verfahren, wenn diese Linie ist direkt in meiner Haupt-Py-Datei

fileName = "2Output.txt" 
fileContentStr = "" 
with open(fileName,'r') as f: 
    for line in f: 
     fileContentStr += line.split(';')[0] 

fileContentList = fileContentStr.split() 

Die zweite Methode ist sehr schnell, die erste (mit der separaten Funktion in einer separaten Datei) ist sehr langsam, was fehlt mir? Danke für jeden Hinweis

+1

In Abwesenheit von irgendwelchen anderen Schuldigen, mir etwas sagt * vielleicht * werden verpassten die Optimierung CPython tut, wenn Strings verketten mit '+ = 'in der Funktionsfall. Ich erinnere mich nicht an die tatsächlichen Umstände, die dazu führen, dass die Optimierung deaktiviert wird. Versuchen Sie, eine Liste der Zeichenfolgen zu erstellen, die diese zurückgeben, um zu sehen, ob der Unterschied noch vorhanden ist. –

+0

@JimFasarakisHilliard Es half, danke –

+1

Unter Ihnen 'mit offenen' Zeile, könnten Sie eine Liste von getrimmten Linien mit einem Listenverständnis wie' fileContentList = [line.split (';') [0] für line in f] 'erstellen –

Antwort

1

Es ist schneller, lokale Variablen als für globale Variablen zu speichern. Lokale Variablen werden in einem Array fester Größe gespeichert, wobei globale Variablen in einem echten Wörterbuch gespeichert werden. Hier

ist ein Link auf eine tiefer gehende answer

Verwandte Themen