2010-04-14 4 views

Répondre

3

Le module pickle intégré peut le faire si vous passez dans la version 2 du protocole (« nouveau protocole binaire »):

import pickle 
pickle.dumps(2**10000, 2) 

qui retourne une chaîne de 1259 octets. Bien sûr, vous voudrez l'écrire normalement dans un fichier, alors utilisez pickle.dump(2**10000, file, 2)

2

Je ne sais pas si vous demandez en général comment stocker de grands nombres entiers dans un fichier binaire ou si le nombre 2 ** 10000 est significatif. Si c'est important alors utiliser plus d'un kilo-octet pour le stocker est évidemment très inutile (je peux l'écrire en 8 caractères!)

Je vais supposer le cas général, mais pour les débutants, vous auriez besoin de 10001 bits pour stocker 2 ** 10000, pas 10000, donc il y a une question sur ce qu'il faut faire sur les 7 bits supplémentaires nécessaires pour remplir les limites d'octets dans le fichier. Je vais juste le stocker en 10008 bits (1251 octets). Cette solution utilise le module bitstring.

from bitstring import BitArray 
fout = open('bignumber', 'wb') 
a = BitArray(uint=2**10000, length=10008) 
a.tofile(fout) 

et de le lire en arrière:

the_number = BitArray(filename='bignumber').uint 

Cela fait vraiment stocker seulement le nombre et rien d'autre dans le fichier.

+0

Dans mon cas, je stocke exactement le même nombre de bits à chaque fois, donc la prochaine fois que je regarde le code je vais vérifier si c'est plus rapide merci. – Mark

Questions connexes