2009-11-03 14 views
1

J'utilise Python appscript pour écrire des illustrations sur mes chansons iTunes. J'ai un fichier stocké au format .pict et quand j'utilise les routines open et read() normales, il lit le contenu sous la forme d'une chaîne (encodée en utf-8).Lire des bytestreams en Python

imFile = open('/Users/kartikaiyer/temp.pict','r') 
data = imFile.read() 
it = app('iTunes') 
sel = it.current_track.get() 
sel.artworks[1].data_.set(data[513:]) 

Le code que j'utilise. il échoue avec un objet non reconnu et je le devine parce que le paramètre set est un stren encodé en utf-8, Toutes les idées sur la façon dont je peux contraindre 'data' à un bytestream et l'utiliser comme un paramètre set. Le module BinAscii n'a pas les fonctions dont j'ai besoin. Toute aide serait très appréciée.

Merci Kartik

+1

Pouvez-vous poster le message d'erreur réelle/pile et aussi la ligne à laquelle il arrive? – mjv

+0

Est-ce Python 2 ou 3? Dans 2. tout, les données seraient certainement une chaîne d'octets (en 3, vous auriez besoin de 'rb', comme quelqu'un a déjà suggéré et vous dites ne fonctionne pas). –

+0

J'utilise python 2.5.1. Voici un extrait de l'erreur. >>> sel [0] .artworks [0] .data_.set (test [513:]) retraçage (appel le plus récent en dernier): Fichier "", ligne 1, dans File « build/bdist .MacOSX-10.5-i386/oeuf/appscript/reference.py », ligne 504, en __call__ appscript.reference.CommandError: Échec de la commande: \t \t OSError: -1731 \t \t MESSAGE: type d'objet inconnu. COMMANDE: app (u '/ Applications/iTunes.app'). Sources.ID (42) .user_playlists.ID (81245) .file_tracks.ID (95566) .artworks [0] .data_.set ('\ x00 \ x00 \ x00 \ x00 \ x00 \ x00 @ \ x00 @ \ x00 \ x11 \ x02 \ xff \ x0c \ x00 \ xff \ xf \ x00 \ x00 \ x00H \ x00 \ x00 \ x00H \ x00 \ x –

Répondre

7

Essayez de régler le mode de lecture binaire:

imFile = open('/Users/kartikaiyer/temp.pict','rb') 
+0

mais aussi read() le lit toujours en chaîne ... –