2013-11-25 2 views
2

Я пытаюсь разобрать некоторые данные из Интернета с помощью BeautifulSoup. Пока я получил данные, что мне нужно от стола, используя следующий код:Удалить форматирование из строк

def webParsing(canvas): 
url='http://www.cmu.edu/dining/hours/index.html' 
try: 
    page= urllib.urlopen(url) 
except: 
    print 'Error while opening html file. Please ensure that you', 
    print ' have a working internet connection.' 
    return 
sourceCode=page.read() 
soup=BeautifulSoup(sourceCode) 
#heading=soup.html.body.div 
tableData=soup.table.tbody 
parseTable(canvas,tableData) 
def parseTable(canvas,tableData): 
    canvas.data.hoursOfOperation=dict() 
    rowTag='tr' 
    colTag='td' 
    for row in tableData.find_all(rowTag): 
     row_text=[] 
     for item in row.find_all(colTag): 
      text=item.text.strip() 
      row_text.append(text) 
     (locations,hoursOpen)=(row_text[0],row_text[1]) 
     locations=locations.split(',') 
     for location in locations: 
      canvas.data.hoursOfOperation[location]=hoursOpen 
    print canvas.data.hoursOfOperation 

Как вы можете видеть, «элементы» в первой колонке отображаются на тех, во второй колонке, используя словарь , Данные в значительной степени соответствуют тому, как я хотел бы его распечатать, однако в python в этих строках много форматирования, таких как «\ n» или «\ xe9» или «\ n \ xao». Есть ли способ удалить все форматирование? Другими словами, удалите все символы новой строки, все, что представляет конкретную кодировку, все, что представляет собой акцентированный символ, и просто получите строковый литерал? Мне не нужен самый эффективный или безопасный метод, я начинающий программист, поэтому желательно, чтобы самый простой метод был оценен! Благодаря!

ответ

3

Вот трюк: Вы можете кодировать его ascii, и удалить все остальное:

>>> 'abc\xe9'.encode('ascii', errors='ignore') 
b'abc' 

Редактировать:

Ах, я забыл, что вам тоже не нужны стандартные специальные символы. Используйте это вместо этого:

''.join(s for s in string if ord(s)>31 and ord(s)<126) 

Надеюсь, это поможет!

+0

Удаляет ли это символы новой строки? – ton1c

1

С этой question вы можете попробовать sometthing так:

def removeNonAscii(s): return "".join(i for i in s if ord(i)<126 and ord(i)>31) 
Смежные вопросы