2009-08-14 7 views
1

Question:BytesIO avec python v2.5

Comment puis-je obtenir un flux d'octets qui fonctionne comme StringIO pour Python 2.5?

Application:

Je suis convertir un PDF en texte, mais ne veulent pas d'enregistrer un fichier sur le disque dur.

Autres pensées:

Je pensais que je pouvais utiliser StringIO, mais il n'y a aucun paramètre de mode (je suppose que "String" implique en mode texte).

Apparemment, la classe io.BytesIO est nouvelle dans la version 2.6, donc cela ne fonctionne pas pour moi non plus.

J'ai une solution avec le module tempfile, mais je voudrais éviter toute lecture/écriture sur/depuis le disque dur.

Répondre

4

En Python 2.x, "chaîne" signifie "octets", et "unicode" signifie "chaîne". Vous devez utiliser les modules StringIO ou cStringIO. Le mode dépend du type de données que vous transmettez en tant que paramètre du tampon.

+0

Merci, je me sens un peu des difficultés mentales au moment. :-P – tgray

+0

Savez-vous pourquoi il existe un BytesIO séparé dans 2.6 si StringIO fait la même chose? – tgray

+0

Compatibilité vers l'avant - 2.6 est destiné à faciliter la transition vers la version 3.0, de sorte que certaines des fonctionnalités 3.0 (telles que le module 'io') ont été rétroportées. –

2

Si vous travaillez avec PDF, puis StringIO devrait être bien aussi longtemps que vous vous rappeliez aux docs:

L'objet StringIO peut accepter des chaînes Unicode ou 8 bits, mais le mélange des deux peut prendre quelques précautions. Si les deux sont utilisés, les chaînes de 8 bits qui ne peuvent pas être interprétées comme ASCII 7 bits (utilisant le huitième bit) provoquent l'augmentation de UnicodeError lorsque getvalue() est appelé.

Notez que cette pas vrai pour cStringIO:

Contrairement aux fichiers de mémoire mis en œuvre par le module StringIO, ceux fournis par ce module ne sont pas en mesure d'accepter des chaînes Unicode qui ne peuvent pas être codés en plaine Chaînes ASCII.

Voir la documentation complète sur: