2011-11-09 6 views
1

J'ai été déconner avec randomisation en python pendant un certain temps maintenant, mais pour une raison quelconque, je suis coincé ici. Peut-être qu'il est juste trop tard dans la nuit ...Python - Ouvrir TXT, Randomiser, Enregistrer en tant que nouveau fichier

Quoi qu'il en soit, je suis à la recherche d'une méthode rapide et facile en Python;

  • Ouvrir le fichier txt
  • Randomize Lines
  • Enregistrer en tant que nouveau fichier TXT

Je me sens un peu stupide ici ... Toute aide est appréciée! Merci!

Répondre

6

Utilisation random.shuffle pour randomiser une séquence:

import random 

with open('filename', 'rb') as infile: 
    lines = infile.readlines() 

random.shuffle(lines) 

with open('newfilename', 'wb') as outfile: 
    outfile.writelines(lines) 

Edit: Le procédé de brassage proposé dans l'autre réponse est fausse. Voir les commentaires et les liens. Voici un exemple plus correct d'un remaniement:

end = len(lines) - 1 
for i in range(end + 1): 
    choice = random.randint(i, end) 
    lines[i], lines[choice] = lines[choice], lines[i] 

Après cette lecture aléatoire, en supposant aléatoire parfait randint, la position d'une ligne est complètement décorrélé sa position avant la lecture aléatoire. En utilisant l'algorithme naïf dans l'autre réponse, ce n'est pas le cas. Les deux shuffles prennent le même nombre d'opérations.

+0

Pourquoi comme binaire ?? –

+0

@TylerCrompton Aucune raison particulière, c'est mon défaut. Cela n'a probablement pas d'importance. – agf

+0

Hmm. Je dois lire à ce sujet de toute façon. Parlant des valeurs par défaut personnelles, je préfère imprimer en standard afin que je puisse voir les résultats dans le shell ou je peux choisir de sauvegarder la sortie sous forme de fichier. C'est peut-être parce que c'est comme ça qu'on m'a enseigné. :/ –

Questions connexes