J'ai appris le comportement de subprocess.Popen
, alors ne l'oubliez pas.
Lorsque je traite d'énormes fichiers en python, j'utilise très souvent des itérateurs pour effectuer un traitement séquentiel afin de ne pas tout mettre en mémoire.
Cependant, la fonction sorted ()
ne peut pas être utilisée pour des fichiers volumineux. En effet, l'itérateur est converti en liste avant le traitement.
Si vous souhaitez trier un gros fichier, utilisez le tri côté système Unix.
import subprocess
def sorted_file_generator(filename):
proc = subprocess.Popen(['sort', filename], stdout=subprocess.PIPE)
while True: #Recevez ligne par ligne en utilisant while
line = proc.stdout.readline()
if line:
yield line.decode('utf-8').strip() #Puisque la valeur de retour est un code d'octet, décodez-le
else:
break
Cet exemple est python3. Dans le cas de 2, la gestion des octets doit être différente
Recommended Posts