Tout est dans le titre. Je me demande si quelqu'un sait qu'une mémoire rapide et raisonnable exige un moyen de mélanger au hasard toutes les lignes d'un fichier de 3 millions de lignes. Je suppose que ce n'est pas possible avec une simple commande vim, donc n'importe quel script simple utilisant Python. J'ai essayé avec du python en utilisant un générateur de nombres aléatoires, mais n'ai pas réussi à trouver une issue simple.
Réponses
Trop de publicités?
John Kugelman
Points
108754
import random
with open('the_file','r') as source:
data = [ (random.random(), line) for line in source ]
data.sort()
with open('another_file','w') as target:
for _, line in data:
target.write( line )
Cela devrait le faire. 3 millions de lignes s'intégreront dans la mémoire de la plupart des machines à moins que les lignes ne soient ÉNORMES (plus de 512 caractères).
Drag0
Points
466
fuzzyTew
Points
748
S.Lott
Points
207588
Voici une autre version
Au niveau de la coquille, utilisez ceci.
python decorate.py | sort | python undecorate.py
decorate.py
import sys
import random
for line in sys.stdin:
sys.stdout.write( "{0}|{1}".format( random.random(), line ) )
undecorate.py
import sys
for line in sys.stdin:
_, _, data= line.partition("|")
sys.stdout.write( line )
Il n'
utilise presque pas de mémoire.