2015-05-27 8 views
5

Sto facendo la sfida Python e provando a familiarizzare con Python, quindi senza guardare le risposte, ho provato a usare il lettore url di Python che legge l'html e poi trova le lettere necessarie Tuttavia nel seguente codice ottengo un errore, che in origine era il pitone 3 urllib.request ma dopo aver risolto io ottenere un nuovo errrornon posso usare il modello di stringa su oggetto simile a un byte - errore di python

<module> 
    print ("".join(re.findall("[A-Za-z]", data))) 
    File "C:\Python34\lib\re.py", line 210, in findall 
    return _compile(pattern, flags).findall(string) 
TypeError: can't use a string pattern on a bytes-like object 

Ora ho provato a guardare questo errore su Google, ma tutto quello che ho avuto era su JSON, che non avrei bisogno? il mio pitone non sarebbe così forte, quindi forse sto facendo questo in modo errato?

#Question 2 - find rare characters 

    import re 
    import urllib.request 

    data = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html") 
mess = data.read() 
messarr = mess.split("--") 

    print ("".join(re.findall("[A-Za-z]", data))) 

    #Question 3 - Find characters in list 

    page = 

    urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/equality.html") 
    mess = page.read() 
    messarr = mess.split("--") 
    print ("".join(re.findall("[^A-Z]+[A-Z]{3}([a-z])[A-Z]{3}[^A-Z]+", page))) 

risposta

9

Il problema è che stai mescolando byte e stringhe di testo. Dovresti decodificare i tuoi dati in una stringa di testo (unicode), ad es. data.decode('utf-8') o utilizzare un oggetto byte per il modello, ad es. re.findall(b"[A-Za-z]") (notare il numero iniziale b prima della stringa letterale).

+0

grazie! questo ha risolto l'errore :) – Matchbox2093

Problemi correlati