J'ai modifié ton code donc ça devrait être plus simple :
(Je l'ai modifié en fonction de la suggestion de @evian)
import os
import sys
def getinfo(filename) :
info = {}
with open(filename, 'r') as f:
for line in f:
ID, name = line.strip().split()
info[ID] = name
return info
def matchname(info, input_file, output_file) :
with open(input_file, 'r') as reader, open(output_file, 'w') as writer:
for line in reader:
n1, n2, content = line.strip().split()
for ID, name in info.items():
if name in content:
print(n1, n2, name, ID, sep='\t', file=writer)
if __name__ == '__main__':
info_filename = 'aa.txt'
content_filename = 'bb.txt'
result_filename = 'final_output2.txt'
info = getinfo(info_filename)
matchname(info, content_filename, result_filename)
print('done')
in est certainement plus rapide que find car le premier nécessite moins de recherches d'attributs, d'appels de fonctions et plus d'opérations de comparaison que le second :
J'ai modifié ton code donc ça devrait être plus simple :
(Je l'ai modifié en fonction de la suggestion de @evian)
(Reviendrez plus tard pour expliquer...)
Questions auxquelles j'ai répondu : Python-QA
in
est certainement plus rapide quefind
car le premier nécessite moins de recherches d'attributs, d'appels de fonctions et plus d'opérations de comparaison que le second :Si vous souhaitez aller plus vite, pensez à utiliser Rust :-)
De plus, votre code n'est pas très bien écrit. Il est recommandé d'utiliser with au lieu de fermer manuellement pour les opérations sur les fichiers.
La complexité temporelle de l'ensemble est O(1)
La complexité temporelle de la liste est O(n)
Vous pouvez essayer d'utiliser des ensembles lors de l'assemblage