2010-10-07 14 views
0

Je suis plus un peu fatigué, mais voilà:utilisation de caractères spéciaux dans Python 2.6

Je fais tome HTML grattage en python 2.6.5 avec BeautifulSoap sur un ubuntubox

Motif de python 2.6. 5: BeautifulSoap suce sous 3.1

je tente d'exécuter le code suivant:

# dataretriveal from html files from DETHERM 
# -*- coding: utf-8 -*- 

import sys,os,re,csv 
from BeautifulSoup import BeautifulSoup 


sys.path.insert(0, os.getcwd()) 

raw_data = open('download.php.html','r') 
soup = BeautifulSoup(raw_data) 

for numdiv in soup.findAll('div', {"id" : "sec"}): 
    currenttable = numdiv.find('table',{"class" : "data"}) 
    if currenttable: 
     numrow=0 
     numcol=0 
     data_list=[] 
     for row in currenttable.findAll('td', {"class" : "dataHead"}): 
      numrow=numrow+1 
     for ncol in currenttable.findAll('th', {"class" : "dataHead"}): 
      numcol=numcol+1 
     for col in currenttable.findAll('td'): 
      col2 = ''.join(col.findAll(text=True)) 
     if col2.index('±'): 
     col2=col2[:col2.index('±')] 
      print(col2.encode("utf-8")) 
     ref=numdiv.find('a') 
     niceref=''.join(ref.findAll(text=True)) 

maintenant, en raison des signes ± i l'erreur suivante lorsque vous essayez de interprent le code wi th:

python code.py

retraçage (appel le plus récent en dernier): Fichier "detherm-wtest.py", ligne 25, dans si col2.index ('±'): UnicodeDecodeError: codec 'ascii' ne peut pas décoder octet 0xc2 en position 0: ordinal pas dans la plage (128)

Comment puis-je résoudre ce problème? mettre u en sorte que nous avons: '±' -> u résultats '±' dans:

retraçage (appel le plus récent en dernier): Fichier "detherm-wtest.py", ligne 25, dans si col2. index (u '±'): ValueError: sousChaîne pas trouvé

encodage du fichier de code actuel

est utf-8

merci

+0

http://www.cmlenz.net/archives/2008/07/the-truth-about-unicode-in-python pour commencer –

Répondre

2

Les chaînes d'octets comme "±" (en Python 2.x) sont codés en l'encodage du fichier source, qui pourrait ne pas être ce que vous voulez. Si col2 est vraiment un objet Unicode, vous devriez utiliser u"±" à la place comme vous avez déjà essayé. Vous pouvez savoir que somestring.index déclenche une exception s'il ne trouve pas d'occurrence alors que somestring.find renvoie -1. Par conséquent, cette

if col2.index('±'): 
     col2=col2[:col2.index('±')] # this is not indented correctly in the question BTW 
     print(col2.encode("utf-8")) 

devrait être

if u'±' in col2: 
     col2=col2[:col2.index(u'±')] 
     print(col2.encode("utf-8")) 

de telle sorte que l'instruction if ne conduit pas à une exception.

+0

vous pouvez également utiliser si u '±' dans col2: = col2. .. – cwa

+0

@ user237182: Je ne sais pas pourquoi je n'ai pas vu ça. Changer dans ma réponse. – AndiDog

+0

Merci beaucoup. Cela a fait l'affaire. De plus, j'ai corrigé certaines de ces fautes (indentati, etc.). C'était vraiment bien. – Daniel