6
votes

Générateur de noms aléatoires simple en python

J'ai un fichier texte contenant d'abord et de la dernière "syllabes ', délimité avec [part1] et [part2]: xxx

tout ce que je veux faire est de choisir une ligne aléatoire, entre [ Part1] et [part2], puis une autre ligne aléatoire entre [Part2] et la fin du fichier, et concaténate les deux ensemble (par exemple, "AEDAR", "Moglar") pour créer des noms aléatoires.

Cependant, je ne sais pas comment analyser efficacement le fichier texte avec readline (). Y a-t-il un meilleur moyen que de balayer chaque ligne séquentiellement et de les stocker dans une liste d'où je peux choisir un élément aléatoire?


2 commentaires

Il semble que vous ayez le contrôle du format de fichier, vous ne pouvez pas le changer à quelque chose de plus facile à analyser?


Il serait beaucoup plus facile d'utiliser deux fichiers.


4 Réponses :


11
votes

Serialize ( Pickle ) Un dictionnaire d'un fichier à la place.

Exemple: xxx


6 commentaires

SD ['Part1'] [Random.Randint (0, Len (SD ["PART1 ']) - 1)] ... ou tout simplement Random.choice (SD [" Part1 " ]) ou l'ensemble des dernières lignes comme impression '' '.join (aléatoire.choice (sd [particularité]) pour Partname dans Tri (sd))


@eumiro - Yep, a vu votre réponse ci-dessous, définitivement plus élégante. bon travail!


@Aj - Quoi qu'il en soit, votre idée dict / cornichon est meilleure que le fichier d'origine.


@eumiro - merci! Je préfère définitivement l'idée de séparer la création / maintenance des fonctions d'administration de la consommation de ses données (fonctions commerciales / applications). Le cornichon semblait juste être un protocole très simple à utiliser entre ces deux utilisateurs / rôles.


Je comprends, mais j'aimerais que les données existent dans le fichier texte, à moins que je ne me trompais pas, ne sommes-nous pas enlevés la dicte dans un fichier, puis le désactivez à nouveau comme un objet? Y a-t-il une manière que je puisse simplement avoir la déclaration pour D dans un fichier texte et non dans le code?


@persepolis - Vous pouvez conserver les données dans un fichier texte et la lire de cette manière également. @eumiro a fourni une réponse ci-dessous qui analyse le format de fichier que vous avez spécifié dans la question initiale. Si vous envisagez de travailler avec de grandes quantités de données, relecture d'un fichier texte après chaque mise à jour sera incrémentiteuse.



3
votes

Vous devrez lire tout le dossier à un moment donné, à moins que vous sachiez au préalable combien de préfixes et de suffixes il y a. Depuis que je suppose que vous ne le faites pas, ni que cela peut changer et que vous ne voulez pas maintenir un numéro pour stocker cela, vous devrez lire dans le dossier, et readline () est un bon moyen de le faire. < / p>

Cependant, vous pouvez pré-traiter votre fichier texte afin qu'il utilise un autre format, tel qu'un cornichon < / a> fichier. En d'autres termes, lisez le fichier texte dans un dictionnaire et cornichez ce dictionnaire. Le dictionnaire pourrait ressembler à quelque chose comme ceci:

dic = {'préfixes': ['ae', 'di', ...], 'Suffixes': ["Dar", "kil", ...]}

de la longueur des tableaux, vous pouvez alors déterminer quel est le nombre aléatoire maximal. Il devrait être plus efficace que la lecture d'une ligne de fichier entière à chaque fois. Et sinon, au moins c'est une solution plus élégante.


0 commentaires


1
votes

modifié @ Eumiro's Script :

Famglar
Famkil
Didar
Ditres
Aedar
Famglar
Ditres
Famtres
Ditres
Modar


0 commentaires