J'ai un fichier texte de 384 Mo avec 50 millions de lignes. Chaque ligne contient 2 entiers séparés par des espaces: une clé et une valeur. Le fichier est trié par clé. J'ai besoin d'un moyen efficace de rechercher les valeurs d'une liste d'environ 200 clés en Python.Lire un fichier énorme en Python
Mon approche actuelle est incluse ci-dessous. Cela prend 30 secondes. Il doit y avoir des foo de Python plus efficaces pour obtenir une efficacité raisonnable de quelques secondes au maximum.
# list contains a sorted list of the keys we need to lookup
# there is a sentinel at the end of list to simplify the code
# we use pointer to iterate through the list of keys
for line in fin:
line = map(int, line.split())
while line[0] == list[pointer].key:
list[pointer].value = line[1]
pointer += 1
while line[0] > list[pointer].key:
pointer += 1
if pointer >= len(list) - 1:
break # end of list; -1 is due to sentinel
recherche binaire Codé + chercher une solution (merci kigurai!):
entries = 24935502 # number of entries
width = 18 # fixed width of an entry in the file padded with spaces
# at the end of each line
for i, search in enumerate(list): # list contains the list of search keys
left, right = 0, entries-1
key = None
while key != search and left <= right:
mid = (left + right)/2
fin.seek(mid * width)
key, value = map(int, fin.readline().split())
if search > key:
left = mid + 1
else:
right = mid - 1
if key != search:
value = None # for when search key is not found
search.result = value # store the result of the search
Je serais intéressé de voir votre solution finale, car il semble que vous l'ayez trouvée à partir de réponses qui ne fournissaient pas de code. –
Ajouté à la fin de la question – marcog