bonjour j'aimerai faire un genrerateur oun plutot un dictionaire de numero telephone en python en gros
un txt avec tout les 01 et06----etc 09 possible
bonjour j'aimerai faire un genrerateur oun plutot un dictionaire de numero telephone en python en gros
un txt avec tout les 01 et06----etc 09 possible
Voila se que jai deja fais je vai tester
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #!/usr/bin/python fichier = open('list.txt', 'w') for icila in ["0%d" % i for i in range(9999999, 99999999)]: fichier.write(icila+"\n") fichier.close()
Bonjour,
Une idée:
C'est un peu rustique, mais ça a l'air de faire le boulot...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 for i1 in xrange(01,100): for i2 in xrange(01,100): for i3 in xrange(01,100): for i4 in xrange(01,100): for i5 in xrange(01,100): print "%02d%02d%02d%02d%02d" % (i1,i2,i3,i4,i5) 0101010101 0101010102 0101010103 0101010104 0101010105 0101010106 0101010107 0101010108 ... 0101072367 0101072368 0101072369 0101072370 0101072371 ...
Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
Mes recettes python: http://www.jpvweb.com
Bonsoir,
pourriez vous être plus clair?
?. Les contraintes sur les numéros:tout les 01 et06----etc 09 possible
-commencent par des 06/01 ..?
-se terminent par des XX?
-se composent de n chiffres...
Des exemples de numéros.
Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tutoriels, ...)
- Tests déjà effectués
Bonsoir,
Note: C'est pratique ça pour du spam avec des sms illimités (merci les opérateurs)...
Pourquoi générer cela neops ?
@+
Merci d'utiliser le forum pour les questions techniques.
Bonjour,
+ une dose de patience.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 with open('list.txt', 'w') as l: for indicatif in ['01', '02', '03', '04', '05', '09']: # 01 : Region parisienne # 02 : Region nord-ouest / Ocean Indien # 03 : Region nord-est # 04 : Region sud-est # 05 : Region sud-ouest / Ocean Atlantique # 09 : Box internet # On evite ici # 06/07 : Mobiles # 08 : Tarification speciale n = 1 # range trop grand pour un for, on utilise while. while n < 100000000: l.write(indicatif+(8-len(str(n)))*"0"+str(n)+"\n") n += 1
Si l'ordre n'importe pas
On evite x passage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 with open('list.txt', 'w') as l: n = 1 # range trop grand pour un for, on utilise while. while n < 100000000: for indicatif in ['01', '02', '03', '04', '05', '09']: # 01 : Region parisienne # 02 : Region nord-ouest / Ocean Indien # 03 : Region nord-est # 04 : Region sud-est # 05 : Region sud-ouest / Ocean Atlantique # 09 : Box internet # On evite ici # 06/07 : Mobiles # 08 : Tarification speciale l.write(indicatif+(8-len(str(n)))*"0"+str(n)+"\n") n += 1
@+
Merci d'utiliser le forum pour les questions techniques.
L'idée de tyrtamos est bien mais:
J'aurais utiliser les indicatif pour le premier for (i1) et range plutôt que xrange pour plus de compatibilité. Il existe des num qui finissent pas 00 (xrange(1, 100))
Merci d'utiliser le forum pour les questions techniques.
Si on veux éviter les passages et être un peu efficace, on peut utiliser les itertools:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 from itertools import product # produit cartesien de plusieurs sequences numeros = range(100000000) indicatifs = ['01', '02', '03', '04', '05', '09'] with open("monfichier.txt",'w') as f: for i,n in product(numeros,indicatifs): f.write("%s%0.8i\n"%(i,n))
Bonsoir,
range supporte 100000000 ? De même que for c'est non chez moi:
Cela fait quand même deux passage, la création de la liste avec range et le for.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 >>> numeros = range(100000000) Processus arrêté
@+
Merci d'utiliser le forum pour les questions techniques.
en effet, la création de la liste est très gourmande, par contre utiliser xrange au lieu de range permet d'avoir un générateur au lieu d'une liste et cela semble fonctionner (tout en consommant pas mal de mémoire dans mon cas).
Je n'ai pas fait de test de performance, mais j'ai tendance à penser que les itertools bénéficient d'optimisation qu'il n'est pas possible d'obtenir en codant à la main. La complexité reste évidemment la même mais j'imagine qu'on gagne sur les constantes. Cela reste effectivement à vérifier...
Si quelqu'un a le courage de tester....
Bonjour,
En gros vous proposeriez quelque chose comme ceci ?
Ca passe mais la création d'une si large liste continue a me gêner...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 from itertools import product from sys import version def myrange(*args): return list(range(*args)) if version.startswith('3'): xrange = myrange numeros = xrange(100000000).__iter__() indicatifs = ['01', '02', '03', '04', '05', '09'] with open("monfichier.txt",'w') as f: for i, n in product(indicatifs, numeros): f.write("%s%0.8i\n"%(i,n))
@+
Edit: Cela 'passe' au niveau code, pas sur que l'interpréteur accepte un si grand nombre d'itération... A tester.
Re Edit:
Et bien j'ai tester avec le code suivant pour éviter les accès disque
Avec 10000000:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 from itertools import product from sys import version def myrange(*args): return list(range(*args)) if version.startswith('3'): xrange = myrange numeros = xrange(100000000).__iter__() indicatifs = ['01', '02', '03', '04', '05', '09'] for i, n in product(indicatifs, numeros): val = "%s%0.8i\n"%(i,n) print('fin', val)
Avec 100000000:
Code : Sélectionner tout - Visualiser dans une fenêtre à part fin 0909999999
@++
Code : Sélectionner tout - Visualiser dans une fenêtre à part Processus arrêté
Merci d'utiliser le forum pour les questions techniques.
Salut,
Pourquoi ne pas faire un product sur (indicatifs, numeros, numeros, numeros, numeros) avec numeros = [ '%02d' x for x in range(99) ]?
Nous ne garderions dans ce cas que deux peties listes de numéros en mémoire.
- W
Bonsoir
Chez-moi, j'ai testé cette instruction dans Python 2.6.6 sous Windows XP et mon ordi a accepté. Il a été à la ramasse pendant 2/3mn mais ça a tenu (bon maintenant je laggue comme un rat pour changer de fenêtre et mon pagefile.sys est bon pour la poubelle mais ceci n'entre pas en ligne de compte n'est-ce pas ?)
J'ai aussi un SE Fedora Core . Quand je booterai dessus, je testerai aussi...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Bonsoir Sve@r,
Je me doute: Pour moi Ubuntu Natty Narwhal @home.
C'est bien ce que je note en fait. La solution n'est pas parfaite (j'avais bien noter : c'est non chez moi ).
Comme dit plus haut ce qui me gène vraiment c'est la création d'une si grande liste.
La génération avec while prend bien moins de mémoire. Les boucles de tyrtamos/wiztricks sans doute aussi (c'est le même principe).
@+
Edit: On est tous sur les builtins mais il est possible de construire un étirable qui retourne +1
Merci d'utiliser le forum pour les questions techniques.
Bonjour,
Sur l'idée de wiztricks
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 from itertools import product numeros = lambda: map(lambda r: "%02d"%r, range(100)) indicatifs = ['01', '02', '03', '04', '05', '09'] with open("monfichier.txt",'w') as f: for i, n1, n2, n3, n4 in product(indicatifs, numeros(), numeros(), numeros(), numeros()): f.write(i+n1+n2+n3+n4+"\n")
Merci d'utiliser le forum pour les questions techniques.
l'idée originale quand même...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 from itertools import product numeros = ['%02d'% x for x in range(100)] indicatifs = ['01', '02', '03', '04', '05', '09'] with open("monfichier.txt",'w') as f: for i, n1, n2, n3, n4 in product(indicatifs, numeros, numeros, numeros, numeros): f.write(i+n1+n2+n3+n4+"\n")
Merci d'utiliser le forum pour les questions techniques.
Salut,
Le stockage des valeurs des différents entiers coûtant 400MB ajoutez les overheads de la gestions d'objets et de pointeurs de listes on arrive vite dans les Giga.... de consommation en mémoire virtuelle, merci le 64 bits.
Mais comme "range" fait cela vite, on stresse l'allocation de mémoire physique en poussant dehors les autres activités et en écrivant beaucoup sur le fichier de pagination.
- W
Bonjour wiztricks,
Je me doutais bien que j'avais une 'daube' @home, c'est confirmé
@+
Merci d'utiliser le forum pour les questions techniques.
Salut,
daube ou pas... pouvoir demander à l'OS une quantité ressources aussi importante côté espace virtuel et fichier de pagination est une possibilité qui doit se contrôler d'une façon ou d'une autre.
note: imaginez lambda qui se connecte sur votre serveur linux... python -c range(100000000) mets le bestiau à genoux et on se reçoit une rafale d'alarmes sur les consoles de supervision.
Dans le genre "denial of service" et il faut se protéger de ces plaisanteries.
- W
Bonjour wiztricks,
C'est en effet d'une protection du système. Je ne me suis, en fait, jamais poser la question (bien qu'ayant déjà vu ce message lors d'installation de deb) car cela n’arrête pas l’interpréteur mais juste le sous-processus.
Comme cela doit être présent sur tout les systèmes (sinon c'est un tord) c'est, je pense, a prendre en compte pour du code 'portable'.
Merci et @+
Merci d'utiliser le forum pour les questions techniques.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager