2014-01-17 10 views
1

Я пытаюсь удалить \ г и \ п от городского словаря JSon апи, но каждый раз, когда я использую re.sub я получаю это:Удаление г и п из списка

expected string or buffer 

Я не уверен, почему, хотя, но вот код:

elif used_prefix and cmd == "udi" and len(args) > 0 and self.getAccess(user) >= 1: 
    try: 
    f = urllib.request.urlopen("http://api.urbandictionary.com/v0/define?term=%s" % args.lower().replace(' ', '+')) 
    data = json.loads(f.readall().decode("utf-8")) 
    data = re.sub(r'\s+', ' ', data).replace("\\","") 
    if (len(data['list']) > 0): 
     definition = data['list'][0][u'definition'] 
     example = data['list'][0][u'example'] 
     permalink = data['list'][0][u'permalink'] 
     room.message("Urban Dictionary search for %s: %s Example: %s Link: %s" % (args.title(), definition, example, permalink), True) 
    else: room.message("Word not found.") 
except: 
    room.message((str(sys.exc_info()[1]))) 
    print(traceback.format_exc()) 

Это отслеживающий:

Traceback (most recent call last): File "C:\Users\dell\Desktop\b0t\TutorialBot.py", line 2186, in onMessage data = re.sub(r'\s+', ' ', data).replace("\\","") File "C:\lib\re.py", line 170, in sub return _compile(pattern, flags).sub(repl, string, count) TypeError: expected string or buffer 
+0

Пост полного обратного прослеживания, пожалуйста? – inspectorG4dget

+3

Вы имели в виду '/ r' и'/n', которые представляют собой 2-символьные строки, или '\ r' и' \ n', которые являются escape-последовательностями для возврата каретки и новой строки соответственно? –

+0

Возможный дубликат [Регулярное выражение для замены «экранированных» символов на их оригиналы] (http://stackoverflow.com/questions/16866339/regular-expression-to-replace-escaped-characters-with-their-originals) – jonrsharpe

ответ

2

проблема заключается в том, что вы пытаетесь использовать re.sub на a dict, а не строка. Кроме того, ваш код кажется немного грязным в местах. Попробуйте вместо этого:

import urllib2 
import json 
import re 

def test(*args): 
    f = urllib2.urlopen("http://api.urbandictionary.com/v0/define?term=%s" % '+'.join(args).lower()) # note urllib2.urlopen rather than urllib.request.urlopen 
    data = json.loads(f.read().decode("utf-8")) # note f.read() instead of f.readall() 
    if len(data['list']) > 0: 
     definition = data['list'][0][u'definition'] 
     example = data['list'][0][u'example'] 
     permalink = data['list'][0][u'permalink'] 
     return "Urban Dictionary search for %s: %s Example: %s Link: %s" % (str(args), definition, example, permalink) # returns a string 

print test('mouth', 'hugging').replace('\n\n', '\n') # prints the string after replacing '\n\n' with '\n' 

Результата:

Urban Dictionary search for ('mouth', 'hugging'): When you put a beer bottle in your mouth, and keep your mouth wrapped around it all day. Example: Josh: "mhmgdfhwrmhhh (attempts to talk while drinking a beer)" 
Ryan: "You know I can't hear you when you're mouth hugging." 
Josh: "mmmffwrrggddsshh" Link: http://mouth-hugging.urbanup.com/7493517 
Смежные вопросы