2017-11-07 5 views
0

Können Sie mir helfen, muss ich my_url in rb Modus öffnen. Versuche das zu tun.BytesIO von URL mit öffnen()

url = "https://my url/" + file_info.file_path 
      response = requests.get(url) 

      with open(BytesIO(response.content), "rb") as f: # Open in 'rb' mode for reading it in way like: 010101010 
       byte = f.read(1) 
       #some algorithm.............. 
       while byte: 
        hexadecimal = binascii.hexlify(byte) 
        decimal = int(hexadecimal, 16) 
        binary = bin(decimal)[2:].zfill(8) 
        hiddenData += binary 
       byte = f.read(1) 

Haben Sie einen Fehler:

Expected str,bytes or.osPathLIke object, not _ioBytesIO

Können Sie mir helfen, bitte, wie ich meine URL in "rb" Modus geöffnet werden soll?

Ich habe versucht, ein Bild zu öffnen, mit Pillow - es ist in Ordnung. Aber was die Verwendung von open() betrifft, kann ich das nicht tun. Bitte ..

+0

Es ist nicht klar, warum Sie die Antwort in ein BytesIO Objekt setzen. In jedem Fall müssen Sie jedoch den vollständigen Traceback anzeigen, damit wir feststellen können, wo der Fehler auftritt. –

+1

Sie brauchen 'f = BytesIO (response.content)' 'f' ist bereits ein Handle, kein Dateiname. Aber Daniel hat Recht. Sie könnten den Inhalt verarbeiten, ohne ihn in einem BytesIO-Objekt abzubilden; –

+0

@ Jean-FrançoisFabre Danke! Ja es funktioniert! – X21

Antwort

1

Sie übergeben ein BytesIO Objekt (im Grunde ein Datei-Handle), wo ein Dateiname erwartet wird.

So quickfix:

f = BytesIO(response.content) 

aber besser, iterieren auf einem bytes Objekte iter entweder manuell (für den Beginn des Algorithmus) oder automatisch (eine for-Schleife, die stoppen, wenn der Iterator erschöpft ist, so dass keine Notwendigkeit für while):

f = iter(response.content) 

byte = next(f) 

#some algorithm.............. 
for byte in f: 
    hexadecimal = binascii.hexlify(byte) 
    decimal = int(hexadecimal, 16) 
    binary = bin(decimal)[2:].zfill(8) 
    hiddenData += binary