2010-12-05 4 views
4

En http://docs.python.org/library/json.html:Qu'est-ce qu'un objet similaire à un fichier dans Python?

simplejson.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, use_decimal[, **kw]]]]]]]]])

Deserialize fp (un .read() - support d'objet comme fichier contenant un document JSON) à un objet Python.

Je sais ce que font read() et write(). Mais après avoir lu cette description "read() - supportant l'objet de type fichier", je trouve que je ne sais pas quel type d'objet supporte les read() et write().

Et je ne trouve pas cela dans le reste de la documentation. Quelqu'un pourrait-il en dire plus sur la déclaration? Pourquoi je pose cette question est pour obtenir "simplejson.load (urllib.open (...))" fait.
La valeur de retour de "urllib.open (...)" n'est pas un objet valide, donc je dois l'adapter pour simplejson. Cependant, il semble que cette chaîne n'est pas read() - support.

+1

Eh bien, vous avez répondu à votre question vous: vraiment _any_ objet qui prend en charge les invocations appropriées de lecture soit(), write(), ou les deux, est considéré comme un objet de type fichier. Il peut vraiment être n'importe quel objet que vous aimez - la joie de taper du canard. –

+0

Je ne pense pas qu'il existe une norme officielle. La plupart des interfaces doivent spécifier exactement les fonctionnalités dont elles ont besoin. Si vous voulez savoir si quelque chose d'autre prend en charge ce qui est nécessaire, vous devrez regarder les docs pour cela ou lire son code source. – martineau

+0

Merci à vous deux :) –

Répondre

4

Les objets de type fichier sont principalement StringIO objets, sockets connectés et bien .. objets de fichiers réels. Si tout se passe bien, renvoie également un objet de type fichier prenant en charge les méthodes nécessaires.

+0

Merci! Je pense que les objets StringIO sont la réponse. –

1

simplejson a les appels charges et décharges qui consomme et produire des chaînes au lieu de fichiers comme des objets.

Ce lien a un exemple dans le contexte de StringIO et simplejson pour les objets de type fichier et chaîne.

http://svn.red-bean.com/bob/simplejson/tags/simplejson-1.3/docs/index.html

+0

Merci pour vos exemples. –

+1

@ user313439, je vous en prie. Juste pour être clair, vous devriez utiliser des décharges et des charges avec des chaînes. L'ajout de StringIO dans votre situation est un surcoût supplémentaire. – kevpie

Questions connexes