Python and string accents - python

I am making a web scraper.
I access google search, I get the link of the web page and then I get the contents of the <title> tag.
The problem is that, for example, the string "P\xe1gina N\xe3o Encontrada!" should be "Página Não Encontrada!".
I tried do decode to latin-1 and then encode to utf-8 and it did not work.
r2 = requests.get(item_str)
texto_pagina = r2.text
soup_item = BeautifulSoup(texto_pagina,"html.parser")
empresa = soup_item.find_all("title")
print(empresa_str.decode('latin1').encode('utf8'))
Can you help me, please?
Thanks !

You can change the retrieved text variable to something like:
string = u'P\xe1gina N\xe3o Encontrada!'.encode('utf-8')
After printing string it seemed to work just fine for me.
Edit
Instead of adding .encode('utf8'), have you tried just using empresa_str.decode('latin1')?
As in:
string = empresa_str.decode('latin_1')

Not the most elegant solution, but worked for me :
def remove_all(substr, str):
index = 0
length = len(substr)
while string.find(str, substr) != -1:
index = string.find(str, substr)
str = str[0:index] + str[index+length:]
return str
def latin1_to_ascii (unicrap):
xlate={ 'xc3cb3':'o' , 'xc3xa7':'c','xc3xb5':'o', 'xc3xa3':'a', 'xc3xa9':'e',
'xc0':'A', 'xc1':'A', 'xc2':'A', 'xc3':'A', 'xc4':'A', 'xc5':'A',
'xc6':'Ae', 'xc7':'C',
'xc8':'E', 'xc9':'E', 'xca':'E', 'xcb':'E',
'xcc':'I', 'xcd':'I', 'xce':'I', 'xcf':'I',
'xd0':'Th', 'xd1':'N',
'xd2':'O', 'xd3':'O', 'xd4':'O', 'xd5':'O', 'xd6':'O', 'xd8':'O',
'xd9':'U', 'xda':'U', 'xdb':'U', 'xdc':'U',
'xdd':'Y', 'xde':'th', 'xdf':'ss',
'xe0':'a', 'xe1':'a', 'xe2':'a', 'xe3':'a', 'xe4':'a', 'xe5':'a',
'xe6':'ae', 'xe7':'c',
'xe8':'e', 'xe9':'e', 'xea':'e', 'xeb':'e',
'xec':'i', 'xed':'i', 'xee':'i', 'xef':'i',
'xf0':'th', 'xf1':'n',
'xf2':'o', 'xf3':'o', 'xf4':'o', 'xf5':'o', 'xf6':'o', 'xf8':'o',
'xf9':'u', 'xfa':'u', 'xfb':'u', 'xfc':'u',
'xfd':'y', 'xfe':'th', 'xff':'y',
'xa1':'!', 'xa2':'{cent}', 'xa3':'{pound}', 'xa4':'{currency}',
'xa5':'{yen}', 'xa6':'|', 'xa7':'{section}', 'xa8':'{umlaut}',
'xa9':'{C}', 'xaa':'{^a}', 'xab':'<<', 'xac':'{not}',
'xad':'-', 'xae':'{R}', 'xaf':'_', 'xb0':'{degrees}',
'xb1':'{+/-}', 'xb2':'{^2}', 'xb3':'{^3}', 'xb4':'',
'xb5':'{micro}', 'xb6':'{paragraph}', 'xb7':'*', 'xb8':'{cedilla}',
'xb9':'{^1}', 'xba':'{^o}', 'xbb':'>>',
'xbc':'{1/4}', 'xbd':'{1/2}', 'xbe':'{3/4}', 'xbf':'?',
'xd7':'*', 'xf7':'/'
}
unicrap = remove_all ('\\', unicrap)
unicrap = remove_all('&', unicrap)
unicrap = remove_all('u2013', unicrap)
r = unicrap
for item,valor in xlate.items():
#print item, unicrap.find(item)
r = r.replace(item,valor)
return r

Related

How to get a certain value from a text file

I want to get a value from an API. However I am unable to tell Python what I want to do.
This is my current code:
response = requests.get('https://sms-service-online.com/api/getServicesAndCost/?country=0&operator=any&lang=en')
data = response.json()
plain = data["data"]
However the data which I want to display in my script is in the ["data"] part of the json. It is kind of a json inside a json.
For example: with
print(plain)
I would recieve this data:
[{"cost":"0.45","id":0,"servise":"VK.com","serviseImg":"bg-vk","number":"Numbers: 3047","value":"vk"},{"cost":"0.07","id":1,"servise":"OK.ru","serviseImg":"bg-ok","number":"Numbers: 14397","value":"ok"},{"cost":"0.15","id":2,"servise":"Whatsapp","serviseImg":"bg-wa","number":"Numbers: 17610","value":"wa"},{"cost":"0.18","id":3,"servise":"Viber","serviseImg":"bg-vi","number":"Numbers: 413","value":"vi"},{"cost":"0.00","id":4,"servise":"Telegram","serviseImg":"bg-tg","number":"Numbers: 0","value":"tg"},{"cost":"0.30","id":5,"servise":"WeChat","serviseImg":"bg-wb","number":"Numbers: 28389","value":"wb"},{"cost":"0.15","id":6,"servise":"Google,youtube,Gmail","serviseImg":"bg-go","number":"Numbers: 15419","value":"go"},{"cost":"0.11","id":7,"servise":"avito","serviseImg":"bg-av","number":"Numbers: 17379","value":"av"},{"cost":"0.07","id":8,"servise":"facebook","serviseImg":"bg-fb","number":"Numbers: 21636","value":"fb"},{"cost":"0.03","id":9,"servise":"Twitter","serviseImg":"bg-tw","number":"Numbers: 26864","value":"tw"},{"cost":"0.05","id":10,"servise":"Uber","serviseImg":"bg-ub","number":"Numbers: 20975","value":"ub"},{"cost":"0.22","id":11,"servise":"Qiwi","serviseImg":"bg-qw","number":"Numbers: 20371","value":"qw"},{"cost":"0.02","id":12,"servise":"Gett","serviseImg":"bg-gt","number":"Numbers: 28501","value":"gt"},{"cost":"0.00","id":13,"servise":"OLX","serviseImg":"bg-sn","number":"Numbers: 0","value":"sn"},{"cost":"0.14","id":14,"servise":"Instagram","serviseImg":"bg-ig","number":"Numbers: 3799","value":"ig"},{"cost":"0.00","id":15,"servise":"Hezzl","serviseImg":"bg-ss","number":"Numbers: 0","value":"ss"},{"cost":"0.07","id":16,"servise":"\u042e\u043b\u0430","serviseImg":"bg-ym","number":"Numbers: 17597","value":"ym"},{"cost":"0.03","id":17,"servise":"Mail.ru","serviseImg":"bg-ma","number":"Numbers: 17936","value":"ma"},{"cost":"0.03","id":18,"servise":"Microsoft","serviseImg":"bg-mm","number":"Numbers: 3830","value":"mm"},{"cost":"0.03","id":19,"servise":"Airbnb","serviseImg":"bg-uk","number":"Numbers: 28266","value":"uk"},{"cost":"0.00","id":20,"servise":"Line messenger","serviseImg":"bg-me","number":"Numbers: 0","value":"me"},{"cost":"0.03","id":21,"servise":"Yahoo","serviseImg":"bg-mb","number":"Numbers: 19077","value":"mb"},{"cost":"0.00","id":22,"servise":"Drugvokrug.ru","serviseImg":"bg-we","number":"Numbers: 0","value":"we"},{"cost":"0.05","id":23,"servise":"5ka.ru","serviseImg":"bg-bd","number":"Numbers: 27541","value":"bd"},{"cost":"0.00","id":24,"servise":"HQ Trivia","serviseImg":"bg-kp","number":"Numbers: 0","value":"kp"},{"cost":"0.65","id":25,"servise":"Delivery Club","serviseImg":"bg-dt","number":"Numbers: 26812","value":"dt"},{"cost":"0.03","id":26,"servise":"Yandex","serviseImg":"bg-ya","number":"Numbers: 20944","value":"ya"},{"cost":"0.05","id":27,"servise":"Steam","serviseImg":"bg-mt","number":"Numbers: 28121","value":"mt"},{"cost":"0.04","id":28,"servise":"Tinder","serviseImg":"bg-oi","number":"Numbers: 27478","value":"oi"},{"cost":"0.02","id":29,"servise":"Mamba, MeetMe","serviseImg":"bg-fd","number":"Numbers: 25328","value":"fd"},{"cost":"0.00","id":30,"servise":"Dent","serviseImg":"bg-zz","number":"Numbers: 0","value":"zz"},{"cost":"0.07","id":31,"servise":"KakaoTalk","serviseImg":"bg-kt","number":"Numbers: 27823","value":"kt"},{"cost":"0.04","id":32,"servise":"AOL","serviseImg":"bg-pm","number":"Numbers: 23369","value":"pm"},{"cost":"0.02","id":33,"servise":"LinkedIN","serviseImg":"bg-tn","number":"Numbers: 32192","value":"tn"},{"cost":"0.03","id":34,"servise":"Tencent QQ","serviseImg":"bg-qq","number":"Numbers: 27883","value":"qq"},{"cost":"0.06","id":35,"servise":"Magnit","serviseImg":"bg-mg","number":"Numbers: 993","value":"mg"},{"cost":"0.00","id":36,"servise":"pof.com","serviseImg":"bg-pf","number":"Numbers: 0","value":"pf"},{"cost":"0.03","id":37,"servise":"Yalla","serviseImg":"bg-yl","number":"Numbers: 27822","value":"yl"},{"cost":"0.00","id":38,"servise":"kolesa.kz","serviseImg":"bg-kl","number":"Numbers: 0","value":"kl"},{"cost":"0.03","id":39,"servise":"premium.one","serviseImg":"bg-po","number":"Numbers: 25869","value":"po"},{"cost":"0.07","id":40,"servise":"Naver","serviseImg":"bg-nv","number":"Numbers: 27582","value":"nv"},{"cost":"0.03","id":41,"servise":"Netflix","serviseImg":"bg-nf","number":"Numbers: 27715","value":"nf"},{"cost":"0.00","id":42,"servise":"icq","serviseImg":"bg-iq","number":"Numbers: 0","value":"iq"},{"cost":"0.00","id":43,"servise":"Onlinerby","serviseImg":"bg-ob","number":"Numbers: 0","value":"ob"},{"cost":"0.00","id":44,"servise":"kufarby","serviseImg":"bg-kb","number":"Numbers: 0","value":"kb"},{"cost":"0.03","id":45,"servise":"Imo","serviseImg":"bg-im","number":"Numbers: 25198","value":"im"},{"cost":"0.00","id":46,"servise":"Michat","serviseImg":"bg-mc","number":"Numbers: 0","value":"mc"},{"cost":"0.03","id":47,"servise":"Discord","serviseImg":"bg-ds","number":"Numbers: 22011","value":"ds"},{"cost":"0.00","id":48,"servise":"Seosprint","serviseImg":"bg-vv","number":"Numbers: 0","value":"vv"},{"cost":"0.00","id":49,"servise":"Monobank","serviseImg":"bg-ji","number":"Numbers: 0","value":"ji"},{"cost":"0.03","id":50,"servise":"TikTok\/Douyin","serviseImg":"bg-lf","number":"Numbers: 26299","value":"lf"},{"cost":"0.00","id":51,"servise":"Ukrnet","serviseImg":"bg-hu","number":"Numbers: 0","value":"hu"},{"cost":"0.00","id":52,"servise":"Skout","serviseImg":"bg-wg","number":"Numbers: 0","value":"wg"},{"cost":"0.00","id":53,"servise":"EasyPay","serviseImg":"bg-rz","number":"Numbers: 0","value":"rz"},{"cost":"0.00","id":54,"servise":"Q12 Trivia","serviseImg":"bg-vf","number":"Numbers: 0","value":"vf"},{"cost":"0.00","id":55,"servise":"Pyro Music","serviseImg":"bg-ny","number":"Numbers: 0","value":"ny"},{"cost":"0.00","id":56,"servise":"Wolt","serviseImg":"bg-rr","number":"Numbers: 0","value":"rr"},{"cost":"0.00","id":57,"servise":"CliQQ","serviseImg":"bg-fe","number":"Numbers: 0","value":"fe"},{"cost":"0.00","id":58,"servise":"ssoidnet","serviseImg":"bg-la","number":"Numbers: 0","value":"la"},{"cost":"0.00","id":59,"servise":"Zoho","serviseImg":"bg-zh","number":"Numbers: 0","value":"zh"},{"cost":"0.00","id":60,"servise":"Ticketmaster","serviseImg":"bg-gp","number":"Numbers: 0","value":"gp"},{"cost":"0.05","id":61,"servise":"Amazon","serviseImg":"bg-am","number":"Numbers: 25313","value":"am"},{"cost":"0.00","id":62,"servise":"Olacabs","serviseImg":"bg-ly","number":"Numbers: 0","value":"ly"},{"cost":"0.00","id":63,"servise":"Rambler","serviseImg":"bg-tc","number":"Numbers: 0","value":"tc"},{"cost":"0.02","id":64,"servise":"ProtonMail","serviseImg":"bg-dp","number":"Numbers: 30668","value":"dp"},{"cost":"0.00","id":65,"servise":"NRJ Music Awards","serviseImg":"bg-pg","number":"Numbers: 0","value":"pg"},{"cost":"0.03","id":66,"servise":"Citymobil","serviseImg":"bg-yf","number":"Numbers: 26997","value":"yf"},{"cost":"0.00","id":67,"servise":"MIRATORG","serviseImg":"bg-op","number":"Numbers: 0","value":"op"},{"cost":"0.03","id":68,"servise":"PGbonus","serviseImg":"bg-fx","number":"Numbers: 27563","value":"fx"},{"cost":"0.03","id":69,"servise":"MEGA","serviseImg":"bg-qr","number":"Numbers: 27848","value":"qr"},{"cost":"0.03","id":70,"servise":"SportMaster","serviseImg":"bg-yk","number":"Numbers: 26584","value":"yk"},{"cost":"0.03","id":71,"servise":"Careem","serviseImg":"bg-ls","number":"Numbers: 27873","value":"ls"},{"cost":"0.03","id":72,"servise":"BIGO LIVE","serviseImg":"bg-bl","number":"Numbers: 25421","value":"bl"},{"cost":"0.03","id":73,"servise":"MyMusicTaste","serviseImg":"bg-mu","number":"Numbers: 27898","value":"mu"},{"cost":"0.03","id":74,"servise":"Snapchat","serviseImg":"bg-fu","number":"Numbers: 27758","value":"fu"},{"cost":"0.00","id":75,"servise":"Keybase","serviseImg":"bg-bf","number":"Numbers: 0","value":"bf"},{"cost":"0.03","id":76,"servise":"OZON","serviseImg":"bg-sg","number":"Numbers: 26595","value":"sg"},{"cost":"0.03","id":77,"servise":"Wildberries","serviseImg":"bg-uu","number":"Numbers: 27220","value":"uu"},{"cost":"0.05","id":78,"servise":"BlaBlaCar","serviseImg":"bg-ua","number":"Numbers: 24367","value":"ua"},{"cost":"0.09","id":79,"servise":"Alibaba","serviseImg":"bg-ab","number":"Numbers: 17818","value":"ab"},{"cost":"0.00","id":80,"servise":"Inboxlv","serviseImg":"bg-iv","number":"Numbers: 0","value":"iv"},{"cost":"0.00","id":81,"servise":"Nttgame","serviseImg":"bg-zy","number":"Numbers: 0","value":"zy"},{"cost":"0.00","id":82,"servise":"Surveytime","serviseImg":"bg-gd","number":"Numbers: 0","value":"gd"},{"cost":"0.00","id":83,"servise":"Mylove","serviseImg":"bg-fy","number":"Numbers: 0","value":"fy"},{"cost":"0.02","id":84,"servise":"mosru","serviseImg":"bg-ce","number":"Numbers: 27173","value":"ce"},{"cost":"0.00","id":85,"servise":"Truecaller","serviseImg":"bg-tl","number":"Numbers: 0","value":"tl"},{"cost":"0.00","id":86,"servise":"Globus","serviseImg":"bg-hm","number":"Numbers: 0","value":"hm"},{"cost":"0.03","id":87,"servise":"Bolt","serviseImg":"bg-tx","number":"Numbers: 27378","value":"tx"},{"cost":"0.00","id":88,"servise":"Shopee","serviseImg":"bg-ka","number":"Numbers: 0","value":"ka"},{"cost":"0.03","id":89,"servise":"Perekrestok.ru","serviseImg":"bg-pl","number":"Numbers: 27883","value":"pl"},{"cost":"0.03","id":90,"servise":"Burger King","serviseImg":"bg-ip","number":"Numbers: 27764","value":"ip"},{"cost":"0.00","id":91,"servise":"Prom","serviseImg":"bg-cm","number":"Numbers: 0","value":"cm"},{"cost":"0.03","id":92,"servise":"AliPay","serviseImg":"bg-hw","number":"Numbers: 27166","value":"hw"},{"cost":"0.00","id":93,"servise":"Karusel","serviseImg":"bg-de","number":"Numbers: 0","value":"de"},{"cost":"0.00","id":94,"servise":"IVI","serviseImg":"bg-jc","number":"Numbers: 0","value":"jc"},{"cost":"0.03","id":95,"servise":"inDriver","serviseImg":"bg-rl","number":"Numbers: 27534","value":"rl"},{"cost":"0.03","id":96,"servise":"Happn","serviseImg":"bg-df","number":"Numbers: 27785","value":"df"},{"cost":"0.00","id":97,"servise":"RuTube","serviseImg":"bg-ui","number":"Numbers: 0","value":"ui"},{"cost":"0.03","id":98,"servise":"Magnolia","serviseImg":"bg-up","number":"Numbers: 27884","value":"up"},{"cost":"0.03","id":99,"servise":"Foodpanda","serviseImg":"bg-nz","number":"Numbers: 27493","value":"nz"},{"cost":"0.00","id":100,"servise":"Weibo","serviseImg":"bg-kf","number":"Numbers: 0","value":"kf"},{"cost":"0.00","id":101,"servise":"BillMill","serviseImg":"bg-ri","number":"Numbers: 0","value":"ri"},{"cost":"0.00","id":102,"servise":"Quipp","serviseImg":"bg-cc","number":"Numbers: 0","value":"cc"},{"cost":"0.00","id":103,"servise":"Okta","serviseImg":"bg-lr","number":"Numbers: 0","value":"lr"},{"cost":"0.03","id":104,"servise":"JDcom","serviseImg":"bg-za","number":"Numbers: 27891","value":"za"},{"cost":"0.05","id":105,"servise":"MTS CashBack","serviseImg":"bg-da","number":"Numbers: 12860","value":"da"},{"cost":"0.00","id":106,"servise":"Fiqsy","serviseImg":"bg-ug","number":"Numbers: 0","value":"ug"},{"cost":"0.00","id":107,"servise":"KuCoinPlay","serviseImg":"bg-sq","number":"Numbers: 0","value":"sq"},{"cost":"0.00","id":108,"servise":"Papara","serviseImg":"bg-zr","number":"Numbers: 0","value":"zr"},{"cost":"0.00","id":109,"servise":"Wish","serviseImg":"bg-xv","number":"Numbers: 0","value":"xv"},{"cost":"0.00","id":110,"servise":"Icrypex","serviseImg":"bg-cx","number":"Numbers: 0","value":"cx"},{"cost":"0.00","id":111,"servise":"PaddyPower","serviseImg":"bg-cw","number":"Numbers: 0","value":"cw"},{"cost":"0.05","id":112,"servise":"Baidu","serviseImg":"bg-li","number":"Numbers: 27813","value":"li"},{"cost":"0.00","id":113,"servise":"Dominos Pizza","serviseImg":"bg-dz","number":"Numbers: 0","value":"dz"},{"cost":"0.00","id":114,"servise":"paycell","serviseImg":"bg-xz","number":"Numbers: 0","value":"xz"},{"cost":"0.03","id":115,"servise":"Lenta","serviseImg":"bg-rd","number":"Numbers: 27651","value":"rd"},{"cost":"0.00","id":116,"servise":"Payberry","serviseImg":"bg-qb","number":"Numbers: 0","value":"qb"},{"cost":"0.03","id":117,"servise":"Drom","serviseImg":"bg-hz","number":"Numbers: 27673","value":"hz"},{"cost":"0.00","id":118,"servise":"GlobalTel","serviseImg":"bg-gl","number":"Numbers: 0","value":"gl"},{"cost":"0.00","id":119,"servise":"Deliveroo","serviseImg":"bg-zk","number":"Numbers: 0","value":"zk"},{"cost":"0.00","id":120,"servise":"Socios","serviseImg":"bg-ia","number":"Numbers: 0","value":"ia"},{"cost":"0.00","id":121,"servise":"Wmaraci","serviseImg":"bg-xl","number":"Numbers: 0","value":"xl"},{"cost":"0.00","id":122,"servise":"Yemeksepeti","serviseImg":"bg-yi","number":"Numbers: 0","value":"yi"},{"cost":"0.00","id":123,"servise":"Nike","serviseImg":"bg-ew","number":"Numbers: 0","value":"ew"},{"cost":"0.02","id":124,"servise":"myGLO","serviseImg":"bg-ae","number":"Numbers: 31671","value":"ae"},{"cost":"0.02","id":125,"servise":"YouStar","serviseImg":"bg-gb","number":"Numbers: 31133","value":"gb"},{"cost":"0.15","id":126,"servise":"\u0420\u0421\u0410","serviseImg":"bg-cy","number":"Numbers: 25178","value":"cy"},{"cost":"0.00","id":127,"servise":"RosaKhutor","serviseImg":"bg-qm","number":"Numbers: 0","value":"qm"},{"cost":"0.00","id":128,"servise":"eBay","serviseImg":"bg-dh","number":"Numbers: 0","value":"dh"},{"cost":"0.00","id":129,"servise":"Pay.kvartplata.ru+","serviseImg":"bg-yb","number":"Numbers: 0","value":"yb"},{"cost":"0.00","id":130,"servise":"GG","serviseImg":"bg-qe","number":"Numbers: 0","value":"qe"},{"cost":"0.03","id":131,"servise":"Grindr","serviseImg":"bg-yw","number":"Numbers: 4841","value":"yw"},{"cost":"0.00","id":132,"servise":"OffGamers","serviseImg":"bg-uz","number":"Numbers: 0","value":"uz"},{"cost":"0.00","id":133,"servise":"Hepsiburadacom","serviseImg":"bg-gx","number":"Numbers: 0","value":"gx"},{"cost":"0.00","id":134,"servise":"Coinbase","serviseImg":"bg-re","number":"Numbers: 0","value":"re"},{"cost":"0.00","id":135,"servise":"RADA NABU","serviseImg":"bg-tj","number":"Numbers: 0","value":"tj"},{"cost":"0.09","id":136,"servise":"PayPal","serviseImg":"bg-ts","number":"Numbers: 27144","value":"ts"},{"cost":"0.00","id":137,"servise":"hily","serviseImg":"bg-rt","number":"Numbers: 0","value":"rt"},{"cost":"0.00","id":138,"servise":"SneakersnStuff","serviseImg":"bg-sf","number":"Numbers: 0","value":"sf"},{"cost":"0.00","id":139,"servise":"Dostavista","serviseImg":"bg-sv","number":"Numbers: 0","value":"sv"},{"cost":"0.00","id":140,"servise":"32red","serviseImg":"bg-qi","number":"Numbers: 0","value":"qi"},{"cost":"0.02","id":141,"servise":"Blizzard","serviseImg":"bg-bz","number":"Numbers: 27797","value":"bz"},{"cost":"0.00","id":142,"servise":"ezbuy","serviseImg":"bg-db","number":"Numbers: 0","value":"db"},{"cost":"0.00","id":143,"servise":"CoinField","serviseImg":"bg-vw","number":"Numbers: 0","value":"vw"},{"cost":"0.00","id":144,"servise":"Airtel","serviseImg":"bg-zl","number":"Numbers: 0","value":"zl"},{"cost":"0.00","id":145,"servise":"Airtel","serviseImg":"bg-wf","number":"Numbers: 0","value":"wf"},{"cost":"0.00","id":146,"servise":"MrGreen","serviseImg":"bg-lw","number":"Numbers: 0","value":"lw"},{"cost":"0.00","id":147,"servise":"Rediffmail","serviseImg":"bg-co","number":"Numbers: 0","value":"co"},{"cost":"0.00","id":148,"servise":"miloan","serviseImg":"bg-ey","number":"Numbers: 0","value":"ey"},{"cost":"0.00","id":149,"servise":"Paytm","serviseImg":"bg-ge","number":"Numbers: 0","value":"ge"},{"cost":"0.00","id":150,"servise":"Dhani","serviseImg":"bg-os","number":"Numbers: 0","value":"os"},{"cost":"0.00","id":151,"servise":"CMTcuzdan","serviseImg":"bg-ql","number":"Numbers: 0","value":"ql"},{"cost":"0.00","id":152,"servise":"Mercado","serviseImg":"bg-cq","number":"Numbers: 0","value":"cq"},{"cost":"0.05","id":153,"servise":"DiDi","serviseImg":"bg-xk","number":"Numbers: 26447","value":"xk"},{"cost":"0.00","id":154,"servise":"Monese","serviseImg":"bg-py","number":"Numbers: 0","value":"py"},{"cost":"0.00","id":155,"servise":"Kotak811","serviseImg":"bg-rv","number":"Numbers: 0","value":"rv"},{"cost":"0.00","id":156,"servise":"Hopi","serviseImg":"bg-jl","number":"Numbers: 0","value":"jl"},{"cost":"0.00","id":157,"servise":"Trendyol","serviseImg":"bg-pr","number":"Numbers: 0","value":"pr"},{"cost":"0.00","id":158,"servise":"Justdating","serviseImg":"bg-pu","number":"Numbers: 0","value":"pu"},{"cost":"0.00","id":159,"servise":"Pairs","serviseImg":"bg-dk","number":"Numbers: 0","value":"dk"},{"cost":"0.00","id":160,"servise":"Touchance","serviseImg":"bg-fm","number":"Numbers: 0","value":"fm"},{"cost":"0.00","id":161,"servise":"SnappFood","serviseImg":"bg-ph","number":"Numbers: 0","value":"ph"},{"cost":"0.00","id":162,"servise":"NCsoft","serviseImg":"bg-sw","number":"Numbers: 0","value":"sw"},{"cost":"0.00","id":163,"servise":"Tosla","serviseImg":"bg-nr","number":"Numbers: 0","value":"nr"},{"cost":"0.00","id":164,"servise":"Ininal","serviseImg":"bg-hy","number":"Numbers: 0","value":"hy"},{"cost":"0.00","id":165,"servise":"Paysend","serviseImg":"bg-tr","number":"Numbers: 0","value":"tr"},{"cost":"0.00","id":166,"servise":"CDkeys","serviseImg":"bg-pq","number":"Numbers: 0","value":"pq"},{"cost":"0.00","id":167,"servise":"AVON","serviseImg":"bg-ff","number":"Numbers: 0","value":"ff"},{"cost":"0.03","id":168,"servise":"dodopizza","serviseImg":"bg-sd","number":"Numbers: 27739","value":"sd"},{"cost":"0.24","id":169,"servise":"McDonalds","serviseImg":"bg-ry","number":"Numbers: 7729","value":"ry"},{"cost":"0.00","id":170,"servise":"E bike Gewinnspiel","serviseImg":"bg-le","number":"Numbers: 0","value":"le"},{"cost":"0.00","id":171,"servise":"JKF","serviseImg":"bg-hr","number":"Numbers: 0","value":"hr"},{"cost":"0.00","id":172,"servise":"MyFishka","serviseImg":"bg-qa","number":"Numbers: 0","value":"qa"},{"cost":"0.00","id":173,"servise":"Craigslist","serviseImg":"bg-wc","number":"Numbers: 0","value":"wc"},{"cost":"0.00","id":174,"servise":"Foody","serviseImg":"bg-kw","number":"Numbers: 0","value":"kw"},{"cost":"0.00","id":175,"servise":"Grab","serviseImg":"bg-jg","number":"Numbers: 0","value":"jg"},{"cost":"0.05","id":176,"servise":"Zalo","serviseImg":"bg-mj","number":"Numbers: 28606","value":"mj"},{"cost":"0.00","id":177,"servise":"LiveScore","serviseImg":"bg-eu","number":"Numbers: 0","value":"eu"},{"cost":"0.00","id":178,"servise":"888casino","serviseImg":"bg-ll","number":"Numbers: 0","value":"ll"},{"cost":"0.00","id":179,"servise":"Gamer","serviseImg":"bg-ed","number":"Numbers: 0","value":"ed"},{"cost":"0.00","id":180,"servise":"Huya","serviseImg":"bg-pp","number":"Numbers: 0","value":"pp"},{"cost":"0.00","id":181,"servise":"WestStein","serviseImg":"bg-th","number":"Numbers: 0","value":"th"},{"cost":"0.04","id":182,"servise":"Tango","serviseImg":"bg-xr","number":"Numbers: 27765","value":"xr"},{"cost":"0.00","id":183,"servise":"Global24","serviseImg":"bg-iz","number":"Numbers: 0","value":"iz"},{"cost":"0.03","id":184,"servise":"\u041c\u0412\u0438\u0434\u0435\u043e","serviseImg":"bg-tk","number":"Numbers: 27660","value":"tk"},{"cost":"0.00","id":185,"servise":"Sheerid","serviseImg":"bg-rx","number":"Numbers: 0","value":"rx"},{"cost":"0.00","id":186,"servise":"99app","serviseImg":"bg-ki","number":"Numbers: 0","value":"ki"},{"cost":"0.00","id":187,"servise":"CAIXA","serviseImg":"bg-my","number":"Numbers: 0","value":"my"},{"cost":"0.00","id":188,"servise":"OfferUp","serviseImg":"bg-zm","number":"Numbers: 0","value":"zm"},{"cost":"0.00","id":189,"servise":"Swvl","serviseImg":"bg-tq","number":"Numbers: 0","value":"tq"},{"cost":"0.00","id":190,"servise":"Haraj","serviseImg":"bg-au","number":"Numbers: 0","value":"au"},{"cost":"0.00","id":191,"servise":"Taksheel","serviseImg":"bg-ei","number":"Numbers: 0","value":"ei"},{"cost":"0.00","id":192,"servise":"hamrahaval","serviseImg":"bg-rp","number":"Numbers: 0","value":"rp"},{"cost":"0.00","id":193,"servise":"Gamekit","serviseImg":"bg-pa","number":"Numbers: 0","value":"pa"},{"cost":"0.00","id":194,"servise":" \u015eikayet var","serviseImg":"bg-fs","number":"Numbers: 0","value":"fs"},{"cost":"0.00","id":195,"servise":"Getir","serviseImg":"bg-ul","number":"Numbers: 0","value":"ul"},{"cost":"0.00","id":196,"servise":"irancell","serviseImg":"bg-cf","number":"Numbers: 0","value":"cf"},{"cost":"0.00","id":197,"servise":"Alfa","serviseImg":"bg-bt","number":"Numbers: 0","value":"bt"},{"cost":"0.00","id":198,"servise":"Disney Hotstar","serviseImg":"bg-ud","number":"Numbers: 0","value":"ud"},{"cost":"0.00","id":199,"servise":"Agroinform","serviseImg":"bg-qu","number":"Numbers: 0","value":"qu"},{"cost":"0.00","id":200,"servise":"humblebundle","serviseImg":"bg-un","number":"Numbers: 0","value":"un"},{"cost":"0.00","id":201,"servise":"Faberlic","serviseImg":"bg-rm","number":"Numbers: 0","value":"rm"},{"cost":"0.00","id":202,"servise":"CafeBazaar","serviseImg":"bg-uo","number":"Numbers: 0","value":"uo"},{"cost":"0.00","id":203,"servise":"cryptocom","serviseImg":"bg-ti","number":"Numbers: 0","value":"ti"},{"cost":"0.00","id":204,"servise":"Gittigidiyor","serviseImg":"bg-nk","number":"Numbers: 0","value":"nk"},{"cost":"0.00","id":205,"servise":"mzadqatar","serviseImg":"bg-jm","number":"Numbers: 0","value":"jm"},{"cost":"0.00","id":206,"servise":"Algida","serviseImg":"bg-lp","number":"Numbers: 0","value":"lp"},{"cost":"0.00","id":207,"servise":"Cita Previa","serviseImg":"bg-si","number":"Numbers: 0","value":"si"},{"cost":"0.00","id":208,"servise":"Potato Chat","serviseImg":"bg-fj","number":"Numbers: 0","value":"fj"},{"cost":"0.00","id":209,"servise":"Bitaqaty","serviseImg":"bg-pt","number":"Numbers: 0","value":"pt"},{"cost":"0.00","id":210,"servise":"Primaries 2020","serviseImg":"bg-qc","number":"Numbers: 0","value":"qc"},{"cost":"0.00","id":211,"servise":"Amasia","serviseImg":"bg-yo","number":"Numbers: 0","value":"yo"},{"cost":"0.00","id":212,"servise":"Dream11","serviseImg":"bg-ve","number":"Numbers: 0","value":"ve"},{"cost":"0.00","id":213,"servise":"Oriflame","serviseImg":"bg-qh","number":"Numbers: 0","value":"qh"},{"cost":"0.00","id":214,"servise":"Bykea","serviseImg":"bg-iu","number":"Numbers: 0","value":"iu"},{"cost":"0.00","id":215,"servise":"Immowelt","serviseImg":"bg-ib","number":"Numbers: 0","value":"ib"},{"cost":"0.00","id":216,"servise":"Digikala","serviseImg":"bg-zv","number":"Numbers: 0","value":"zv"},{"cost":"0.00","id":217,"servise":"Wing Money","serviseImg":"bg-jb","number":"Numbers: 0","value":"jb"},{"cost":"0.00","id":218,"servise":"Yaay","serviseImg":"bg-vn","number":"Numbers: 0","value":"vn"},{"cost":"0.00","id":219,"servise":"GameArena","serviseImg":"bg-wn","number":"Numbers: 0","value":"wn"},{"cost":"0.04","id":220,"servise":"Vita express","serviseImg":"bg-bj","number":"Numbers: 27861","value":"bj"},{"cost":"0.00","id":221,"servise":"Auchan","serviseImg":"bg-st","number":"Numbers: 0","value":"st"},{"cost":"0.00","id":222,"servise":"Picpay","serviseImg":"bg-ev","number":"Numbers: 0","value":"ev"},{"cost":"0.00","id":223,"servise":"Blued","serviseImg":"bg-qn","number":"Numbers: 0","value":"qn"},{"cost":"0.05","id":224,"servise":"Not on the list","serviseImg":"bg-ot","number":"Numbers: 19352","value":"ot"}]
The problem is that after my knowledge this is a wrong formatted json file, even if I remove "[" and "]".
I though of just looking at it as a text file to get a specific value but I was unable to find something on the internet about this topic.
I want to get the following value:
From:
{"cost":"0.00","id":123,"servise":"Nike","serviseImg":"bg-ew","number":"Numbers: 0","value":"ew"}
I want to get:
Numbers: 0
Use json.loads to become a dictionary query:
import requests
import json
response = requests.get('https://sms-service-online.com/api/getServicesAndCost/?country=0&operator=any&lang=en')
data = response.json()
plain = data["data"]
for d in json.loads(plain):
if d['id'] == 123:
print(d)
You have a list of dict in your first example. So first you need to select which dict you want. For instance, if your query is called 'json_list'
json_list[2]
will get you the third item in that list.
For what you are asking, try:
j = {"cost":"0.00","id":123,"servise":"Nike","serviseImg":"bg-ew","number":"Numbers: 0","value":"ew"}
j["number"].split()[-1]
Assuming you want to check all numbers in all dict, try:
json_list=[{"cost":"0.45","id":0,"servise":"VK.com","serviseImg":"bg-vk","number":"Numbers: 3047","value":"vk"},{"cost":"0.07","id":1,"servise":"OK.ru","serviseImg":"bg-ok","number":"Numbers: 14397","value":"ok"},{"cost":"0.15","id":2,"servise":"Whatsapp","serviseImg":"bg-wa","number":"Numbers: 17610","value":"wa"},{"cost":"0.18","id":3,"servise":"Viber","serviseImg":"bg-vi","number":"Numbers: 413","value":"vi"},{"cost":"0.00","id":4,"servise":"Telegram","serviseImg":"bg-tg","number":"Numbers: 0","value":"tg"},{"cost":"0.30","id":5,"servise":"WeChat","serviseImg":"bg-wb","number":"Numbers: 28389","value":"wb"},{"cost":"0.15","id":6,"servise":"Google,youtube,Gmail","serviseImg":"bg-go","number":"Numbers: 15419","value":"go"},{"cost":"0.11","id":7,"servise":"avito","serviseImg":"bg-av","number":"Numbers: 17379","value":"av"},{"cost":"0.07","id":8,"servise":"facebook","serviseImg":"bg-fb","number":"Numbers: 21636","value":"fb"},{"cost":"0.03","id":9,"servise":"Twitter","serviseImg":"bg-tw","number":"Numbers: 26864","value":"tw"},{"cost":"0.05","id":10,"servise":"Uber","serviseImg":"bg-ub","number":"Numbers: 20975","value":"ub"},{"cost":"0.22","id":11,"servise":"Qiwi","serviseImg":"bg-qw","number":"Numbers: 20371","value":"qw"},{"cost":"0.02","id":12,"servise":"Gett","serviseImg":"bg-gt","number":"Numbers: 28501","value":"gt"},{"cost":"0.00","id":13,"servise":"OLX","serviseImg":"bg-sn","number":"Numbers: 0","value":"sn"},{"cost":"0.14","id":14,"servise":"Instagram","serviseImg":"bg-ig","number":"Numbers: 3799","value":"ig"},{"cost":"0.00","id":15,"servise":"Hezzl","serviseImg":"bg-ss","number":"Numbers: 0","value":"ss"},{"cost":"0.07","id":16,"servise":"\u042e\u043b\u0430","serviseImg":"bg-ym","number":"Numbers: 17597","value":"ym"},{"cost":"0.03","id":17,"servise":"Mail.ru","serviseImg":"bg-ma","number":"Numbers: 17936","value":"ma"},{"cost":"0.03","id":18,"servise":"Microsoft","serviseImg":"bg-mm","number":"Numbers: 3830","value":"mm"},{"cost":"0.03","id":19,"servise":"Airbnb","serviseImg":"bg-uk","number":"Numbers: 28266","value":"uk"},{"cost":"0.00","id":20,"servise":"Line messenger","serviseImg":"bg-me","number":"Numbers: 0","value":"me"},{"cost":"0.03","id":21,"servise":"Yahoo","serviseImg":"bg-mb","number":"Numbers: 19077","value":"mb"},{"cost":"0.00","id":22,"servise":"Drugvokrug.ru","serviseImg":"bg-we","number":"Numbers: 0","value":"we"},{"cost":"0.05","id":23,"servise":"5ka.ru","serviseImg":"bg-bd","number":"Numbers: 27541","value":"bd"},{"cost":"0.00","id":24,"servise":"HQ Trivia","serviseImg":"bg-kp","number":"Numbers: 0","value":"kp"},{"cost":"0.65","id":25,"servise":"Delivery Club","serviseImg":"bg-dt","number":"Numbers: 26812","value":"dt"},{"cost":"0.03","id":26,"servise":"Yandex","serviseImg":"bg-ya","number":"Numbers: 20944","value":"ya"},{"cost":"0.05","id":27,"servise":"Steam","serviseImg":"bg-mt","number":"Numbers: 28121","value":"mt"},{"cost":"0.04","id":28,"servise":"Tinder","serviseImg":"bg-oi","number":"Numbers: 27478","value":"oi"},{"cost":"0.02","id":29,"servise":"Mamba, MeetMe","serviseImg":"bg-fd","number":"Numbers: 25328","value":"fd"},{"cost":"0.00","id":30,"servise":"Dent","serviseImg":"bg-zz","number":"Numbers: 0","value":"zz"},{"cost":"0.07","id":31,"servise":"KakaoTalk","serviseImg":"bg-kt","number":"Numbers: 27823","value":"kt"},{"cost":"0.04","id":32,"servise":"AOL","serviseImg":"bg-pm","number":"Numbers: 23369","value":"pm"},{"cost":"0.02","id":33,"servise":"LinkedIN","serviseImg":"bg-tn","number":"Numbers: 32192","value":"tn"},{"cost":"0.03","id":34,"servise":"Tencent QQ","serviseImg":"bg-qq","number":"Numbers: 27883","value":"qq"},{"cost":"0.06","id":35,"servise":"Magnit","serviseImg":"bg-mg","number":"Numbers: 993","value":"mg"},{"cost":"0.00","id":36,"servise":"pof.com","serviseImg":"bg-pf","number":"Numbers: 0","value":"pf"},{"cost":"0.03","id":37,"servise":"Yalla","serviseImg":"bg-yl","number":"Numbers: 27822","value":"yl"},{"cost":"0.00","id":38,"servise":"kolesa.kz","serviseImg":"bg-kl","number":"Numbers: 0","value":"kl"},{"cost":"0.03","id":39,"servise":"premium.one","serviseImg":"bg-po","number":"Numbers: 25869","value":"po"},{"cost":"0.07","id":40,"servise":"Naver","serviseImg":"bg-nv","number":"Numbers: 27582","value":"nv"},{"cost":"0.03","id":41,"servise":"Netflix","serviseImg":"bg-nf","number":"Numbers: 27715","value":"nf"},{"cost":"0.00","id":42,"servise":"icq","serviseImg":"bg-iq","number":"Numbers: 0","value":"iq"},{"cost":"0.00","id":43,"servise":"Onlinerby","serviseImg":"bg-ob","number":"Numbers: 0","value":"ob"},{"cost":"0.00","id":44,"servise":"kufarby","serviseImg":"bg-kb","number":"Numbers: 0","value":"kb"},{"cost":"0.03","id":45,"servise":"Imo","serviseImg":"bg-im","number":"Numbers: 25198","value":"im"},{"cost":"0.00","id":46,"servise":"Michat","serviseImg":"bg-mc","number":"Numbers: 0","value":"mc"},{"cost":"0.03","id":47,"servise":"Discord","serviseImg":"bg-ds","number":"Numbers: 22011","value":"ds"},{"cost":"0.00","id":48,"servise":"Seosprint","serviseImg":"bg-vv","number":"Numbers: 0","value":"vv"},{"cost":"0.00","id":49,"servise":"Monobank","serviseImg":"bg-ji","number":"Numbers: 0","value":"ji"},{"cost":"0.03","id":50,"servise":"TikTok\/Douyin","serviseImg":"bg-lf","number":"Numbers: 26299","value":"lf"},{"cost":"0.00","id":51,"servise":"Ukrnet","serviseImg":"bg-hu","number":"Numbers: 0","value":"hu"},{"cost":"0.00","id":52,"servise":"Skout","serviseImg":"bg-wg","number":"Numbers: 0","value":"wg"},{"cost":"0.00","id":53,"servise":"EasyPay","serviseImg":"bg-rz","number":"Numbers: 0","value":"rz"},{"cost":"0.00","id":54,"servise":"Q12 Trivia","serviseImg":"bg-vf","number":"Numbers: 0","value":"vf"},{"cost":"0.00","id":55,"servise":"Pyro Music","serviseImg":"bg-ny","number":"Numbers: 0","value":"ny"},{"cost":"0.00","id":56,"servise":"Wolt","serviseImg":"bg-rr","number":"Numbers: 0","value":"rr"},{"cost":"0.00","id":57,"servise":"CliQQ","serviseImg":"bg-fe","number":"Numbers: 0","value":"fe"},{"cost":"0.00","id":58,"servise":"ssoidnet","serviseImg":"bg-la","number":"Numbers: 0","value":"la"},{"cost":"0.00","id":59,"servise":"Zoho","serviseImg":"bg-zh","number":"Numbers: 0","value":"zh"},{"cost":"0.00","id":60,"servise":"Ticketmaster","serviseImg":"bg-gp","number":"Numbers: 0","value":"gp"},{"cost":"0.05","id":61,"servise":"Amazon","serviseImg":"bg-am","number":"Numbers: 25313","value":"am"},{"cost":"0.00","id":62,"servise":"Olacabs","serviseImg":"bg-ly","number":"Numbers: 0","value":"ly"},{"cost":"0.00","id":63,"servise":"Rambler","serviseImg":"bg-tc","number":"Numbers: 0","value":"tc"},{"cost":"0.02","id":64,"servise":"ProtonMail","serviseImg":"bg-dp","number":"Numbers: 30668","value":"dp"},{"cost":"0.00","id":65,"servise":"NRJ Music Awards","serviseImg":"bg-pg","number":"Numbers: 0","value":"pg"},{"cost":"0.03","id":66,"servise":"Citymobil","serviseImg":"bg-yf","number":"Numbers: 26997","value":"yf"},{"cost":"0.00","id":67,"servise":"MIRATORG","serviseImg":"bg-op","number":"Numbers: 0","value":"op"},{"cost":"0.03","id":68,"servise":"PGbonus","serviseImg":"bg-fx","number":"Numbers: 27563","value":"fx"},{"cost":"0.03","id":69,"servise":"MEGA","serviseImg":"bg-qr","number":"Numbers: 27848","value":"qr"},{"cost":"0.03","id":70,"servise":"SportMaster","serviseImg":"bg-yk","number":"Numbers: 26584","value":"yk"},{"cost":"0.03","id":71,"servise":"Careem","serviseImg":"bg-ls","number":"Numbers: 27873","value":"ls"},{"cost":"0.03","id":72,"servise":"BIGO LIVE","serviseImg":"bg-bl","number":"Numbers: 25421","value":"bl"},{"cost":"0.03","id":73,"servise":"MyMusicTaste","serviseImg":"bg-mu","number":"Numbers: 27898","value":"mu"},{"cost":"0.03","id":74,"servise":"Snapchat","serviseImg":"bg-fu","number":"Numbers: 27758","value":"fu"},{"cost":"0.00","id":75,"servise":"Keybase","serviseImg":"bg-bf","number":"Numbers: 0","value":"bf"},{"cost":"0.03","id":76,"servise":"OZON","serviseImg":"bg-sg","number":"Numbers: 26595","value":"sg"},{"cost":"0.03","id":77,"servise":"Wildberries","serviseImg":"bg-uu","number":"Numbers: 27220","value":"uu"},{"cost":"0.05","id":78,"servise":"BlaBlaCar","serviseImg":"bg-ua","number":"Numbers: 24367","value":"ua"},{"cost":"0.09","id":79,"servise":"Alibaba","serviseImg":"bg-ab","number":"Numbers: 17818","value":"ab"},{"cost":"0.00","id":80,"servise":"Inboxlv","serviseImg":"bg-iv","number":"Numbers: 0","value":"iv"},{"cost":"0.00","id":81,"servise":"Nttgame","serviseImg":"bg-zy","number":"Numbers: 0","value":"zy"},{"cost":"0.00","id":82,"servise":"Surveytime","serviseImg":"bg-gd","number":"Numbers: 0","value":"gd"},{"cost":"0.00","id":83,"servise":"Mylove","serviseImg":"bg-fy","number":"Numbers: 0","value":"fy"},{"cost":"0.02","id":84,"servise":"mosru","serviseImg":"bg-ce","number":"Numbers: 27173","value":"ce"},{"cost":"0.00","id":85,"servise":"Truecaller","serviseImg":"bg-tl","number":"Numbers: 0","value":"tl"},{"cost":"0.00","id":86,"servise":"Globus","serviseImg":"bg-hm","number":"Numbers: 0","value":"hm"},{"cost":"0.03","id":87,"servise":"Bolt","serviseImg":"bg-tx","number":"Numbers: 27378","value":"tx"},{"cost":"0.00","id":88,"servise":"Shopee","serviseImg":"bg-ka","number":"Numbers: 0","value":"ka"},{"cost":"0.03","id":89,"servise":"Perekrestok.ru","serviseImg":"bg-pl","number":"Numbers: 27883","value":"pl"},{"cost":"0.03","id":90,"servise":"Burger King","serviseImg":"bg-ip","number":"Numbers: 27764","value":"ip"},{"cost":"0.00","id":91,"servise":"Prom","serviseImg":"bg-cm","number":"Numbers: 0","value":"cm"},{"cost":"0.03","id":92,"servise":"AliPay","serviseImg":"bg-hw","number":"Numbers: 27166","value":"hw"},{"cost":"0.00","id":93,"servise":"Karusel","serviseImg":"bg-de","number":"Numbers: 0","value":"de"},{"cost":"0.00","id":94,"servise":"IVI","serviseImg":"bg-jc","number":"Numbers: 0","value":"jc"},{"cost":"0.03","id":95,"servise":"inDriver","serviseImg":"bg-rl","number":"Numbers: 27534","value":"rl"},{"cost":"0.03","id":96,"servise":"Happn","serviseImg":"bg-df","number":"Numbers: 27785","value":"df"},{"cost":"0.00","id":97,"servise":"RuTube","serviseImg":"bg-ui","number":"Numbers: 0","value":"ui"},{"cost":"0.03","id":98,"servise":"Magnolia","serviseImg":"bg-up","number":"Numbers: 27884","value":"up"},{"cost":"0.03","id":99,"servise":"Foodpanda","serviseImg":"bg-nz","number":"Numbers: 27493","value":"nz"},{"cost":"0.00","id":100,"servise":"Weibo","serviseImg":"bg-kf","number":"Numbers: 0","value":"kf"},{"cost":"0.00","id":101,"servise":"BillMill","serviseImg":"bg-ri","number":"Numbers: 0","value":"ri"},{"cost":"0.00","id":102,"servise":"Quipp","serviseImg":"bg-cc","number":"Numbers: 0","value":"cc"},{"cost":"0.00","id":103,"servise":"Okta","serviseImg":"bg-lr","number":"Numbers: 0","value":"lr"},{"cost":"0.03","id":104,"servise":"JDcom","serviseImg":"bg-za","number":"Numbers: 27891","value":"za"},{"cost":"0.05","id":105,"servise":"MTS CashBack","serviseImg":"bg-da","number":"Numbers: 12860","value":"da"},{"cost":"0.00","id":106,"servise":"Fiqsy","serviseImg":"bg-ug","number":"Numbers: 0","value":"ug"},{"cost":"0.00","id":107,"servise":"KuCoinPlay","serviseImg":"bg-sq","number":"Numbers: 0","value":"sq"},{"cost":"0.00","id":108,"servise":"Papara","serviseImg":"bg-zr","number":"Numbers: 0","value":"zr"},{"cost":"0.00","id":109,"servise":"Wish","serviseImg":"bg-xv","number":"Numbers: 0","value":"xv"},{"cost":"0.00","id":110,"servise":"Icrypex","serviseImg":"bg-cx","number":"Numbers: 0","value":"cx"},{"cost":"0.00","id":111,"servise":"PaddyPower","serviseImg":"bg-cw","number":"Numbers: 0","value":"cw"},{"cost":"0.05","id":112,"servise":"Baidu","serviseImg":"bg-li","number":"Numbers: 27813","value":"li"},{"cost":"0.00","id":113,"servise":"Dominos Pizza","serviseImg":"bg-dz","number":"Numbers: 0","value":"dz"},{"cost":"0.00","id":114,"servise":"paycell","serviseImg":"bg-xz","number":"Numbers: 0","value":"xz"},{"cost":"0.03","id":115,"servise":"Lenta","serviseImg":"bg-rd","number":"Numbers: 27651","value":"rd"},{"cost":"0.00","id":116,"servise":"Payberry","serviseImg":"bg-qb","number":"Numbers: 0","value":"qb"},{"cost":"0.03","id":117,"servise":"Drom","serviseImg":"bg-hz","number":"Numbers: 27673","value":"hz"},{"cost":"0.00","id":118,"servise":"GlobalTel","serviseImg":"bg-gl","number":"Numbers: 0","value":"gl"},{"cost":"0.00","id":119,"servise":"Deliveroo","serviseImg":"bg-zk","number":"Numbers: 0","value":"zk"},{"cost":"0.00","id":120,"servise":"Socios","serviseImg":"bg-ia","number":"Numbers: 0","value":"ia"},{"cost":"0.00","id":121,"servise":"Wmaraci","serviseImg":"bg-xl","number":"Numbers: 0","value":"xl"},{"cost":"0.00","id":122,"servise":"Yemeksepeti","serviseImg":"bg-yi","number":"Numbers: 0","value":"yi"},{"cost":"0.00","id":123,"servise":"Nike","serviseImg":"bg-ew","number":"Numbers: 0","value":"ew"},{"cost":"0.02","id":124,"servise":"myGLO","serviseImg":"bg-ae","number":"Numbers: 31671","value":"ae"},{"cost":"0.02","id":125,"servise":"YouStar","serviseImg":"bg-gb","number":"Numbers: 31133","value":"gb"},{"cost":"0.15","id":126,"servise":"\u0420\u0421\u0410","serviseImg":"bg-cy","number":"Numbers: 25178","value":"cy"},{"cost":"0.00","id":127,"servise":"RosaKhutor","serviseImg":"bg-qm","number":"Numbers: 0","value":"qm"},{"cost":"0.00","id":128,"servise":"eBay","serviseImg":"bg-dh","number":"Numbers: 0","value":"dh"},{"cost":"0.00","id":129,"servise":"Pay.kvartplata.ru+","serviseImg":"bg-yb","number":"Numbers: 0","value":"yb"},{"cost":"0.00","id":130,"servise":"GG","serviseImg":"bg-qe","number":"Numbers: 0","value":"qe"},{"cost":"0.03","id":131,"servise":"Grindr","serviseImg":"bg-yw","number":"Numbers: 4841","value":"yw"},{"cost":"0.00","id":132,"servise":"OffGamers","serviseImg":"bg-uz","number":"Numbers: 0","value":"uz"},{"cost":"0.00","id":133,"servise":"Hepsiburadacom","serviseImg":"bg-gx","number":"Numbers: 0","value":"gx"},{"cost":"0.00","id":134,"servise":"Coinbase","serviseImg":"bg-re","number":"Numbers: 0","value":"re"},{"cost":"0.00","id":135,"servise":"RADA NABU","serviseImg":"bg-tj","number":"Numbers: 0","value":"tj"},{"cost":"0.09","id":136,"servise":"PayPal","serviseImg":"bg-ts","number":"Numbers: 27144","value":"ts"},{"cost":"0.00","id":137,"servise":"hily","serviseImg":"bg-rt","number":"Numbers: 0","value":"rt"},{"cost":"0.00","id":138,"servise":"SneakersnStuff","serviseImg":"bg-sf","number":"Numbers: 0","value":"sf"},{"cost":"0.00","id":139,"servise":"Dostavista","serviseImg":"bg-sv","number":"Numbers: 0","value":"sv"},{"cost":"0.00","id":140,"servise":"32red","serviseImg":"bg-qi","number":"Numbers: 0","value":"qi"},{"cost":"0.02","id":141,"servise":"Blizzard","serviseImg":"bg-bz","number":"Numbers: 27797","value":"bz"},{"cost":"0.00","id":142,"servise":"ezbuy","serviseImg":"bg-db","number":"Numbers: 0","value":"db"},{"cost":"0.00","id":143,"servise":"CoinField","serviseImg":"bg-vw","number":"Numbers: 0","value":"vw"},{"cost":"0.00","id":144,"servise":"Airtel","serviseImg":"bg-zl","number":"Numbers: 0","value":"zl"},{"cost":"0.00","id":145,"servise":"Airtel","serviseImg":"bg-wf","number":"Numbers: 0","value":"wf"},{"cost":"0.00","id":146,"servise":"MrGreen","serviseImg":"bg-lw","number":"Numbers: 0","value":"lw"},{"cost":"0.00","id":147,"servise":"Rediffmail","serviseImg":"bg-co","number":"Numbers: 0","value":"co"},{"cost":"0.00","id":148,"servise":"miloan","serviseImg":"bg-ey","number":"Numbers: 0","value":"ey"},{"cost":"0.00","id":149,"servise":"Paytm","serviseImg":"bg-ge","number":"Numbers: 0","value":"ge"},{"cost":"0.00","id":150,"servise":"Dhani","serviseImg":"bg-os","number":"Numbers: 0","value":"os"},{"cost":"0.00","id":151,"servise":"CMTcuzdan","serviseImg":"bg-ql","number":"Numbers: 0","value":"ql"},{"cost":"0.00","id":152,"servise":"Mercado","serviseImg":"bg-cq","number":"Numbers: 0","value":"cq"},{"cost":"0.05","id":153,"servise":"DiDi","serviseImg":"bg-xk","number":"Numbers: 26447","value":"xk"},{"cost":"0.00","id":154,"servise":"Monese","serviseImg":"bg-py","number":"Numbers: 0","value":"py"},{"cost":"0.00","id":155,"servise":"Kotak811","serviseImg":"bg-rv","number":"Numbers: 0","value":"rv"},{"cost":"0.00","id":156,"servise":"Hopi","serviseImg":"bg-jl","number":"Numbers: 0","value":"jl"},{"cost":"0.00","id":157,"servise":"Trendyol","serviseImg":"bg-pr","number":"Numbers: 0","value":"pr"},{"cost":"0.00","id":158,"servise":"Justdating","serviseImg":"bg-pu","number":"Numbers: 0","value":"pu"},{"cost":"0.00","id":159,"servise":"Pairs","serviseImg":"bg-dk","number":"Numbers: 0","value":"dk"},{"cost":"0.00","id":160,"servise":"Touchance","serviseImg":"bg-fm","number":"Numbers: 0","value":"fm"},{"cost":"0.00","id":161,"servise":"SnappFood","serviseImg":"bg-ph","number":"Numbers: 0","value":"ph"},{"cost":"0.00","id":162,"servise":"NCsoft","serviseImg":"bg-sw","number":"Numbers: 0","value":"sw"},{"cost":"0.00","id":163,"servise":"Tosla","serviseImg":"bg-nr","number":"Numbers: 0","value":"nr"},{"cost":"0.00","id":164,"servise":"Ininal","serviseImg":"bg-hy","number":"Numbers: 0","value":"hy"},{"cost":"0.00","id":165,"servise":"Paysend","serviseImg":"bg-tr","number":"Numbers: 0","value":"tr"},{"cost":"0.00","id":166,"servise":"CDkeys","serviseImg":"bg-pq","number":"Numbers: 0","value":"pq"},{"cost":"0.00","id":167,"servise":"AVON","serviseImg":"bg-ff","number":"Numbers: 0","value":"ff"},{"cost":"0.03","id":168,"servise":"dodopizza","serviseImg":"bg-sd","number":"Numbers: 27739","value":"sd"},{"cost":"0.24","id":169,"servise":"McDonalds","serviseImg":"bg-ry","number":"Numbers: 7729","value":"ry"},{"cost":"0.00","id":170,"servise":"E bike Gewinnspiel","serviseImg":"bg-le","number":"Numbers: 0","value":"le"},{"cost":"0.00","id":171,"servise":"JKF","serviseImg":"bg-hr","number":"Numbers: 0","value":"hr"},{"cost":"0.00","id":172,"servise":"MyFishka","serviseImg":"bg-qa","number":"Numbers: 0","value":"qa"},{"cost":"0.00","id":173,"servise":"Craigslist","serviseImg":"bg-wc","number":"Numbers: 0","value":"wc"},{"cost":"0.00","id":174,"servise":"Foody","serviseImg":"bg-kw","number":"Numbers: 0","value":"kw"},{"cost":"0.00","id":175,"servise":"Grab","serviseImg":"bg-jg","number":"Numbers: 0","value":"jg"},{"cost":"0.05","id":176,"servise":"Zalo","serviseImg":"bg-mj","number":"Numbers: 28606","value":"mj"},{"cost":"0.00","id":177,"servise":"LiveScore","serviseImg":"bg-eu","number":"Numbers: 0","value":"eu"},{"cost":"0.00","id":178,"servise":"888casino","serviseImg":"bg-ll","number":"Numbers: 0","value":"ll"},{"cost":"0.00","id":179,"servise":"Gamer","serviseImg":"bg-ed","number":"Numbers: 0","value":"ed"},{"cost":"0.00","id":180,"servise":"Huya","serviseImg":"bg-pp","number":"Numbers: 0","value":"pp"},{"cost":"0.00","id":181,"servise":"WestStein","serviseImg":"bg-th","number":"Numbers: 0","value":"th"},{"cost":"0.04","id":182,"servise":"Tango","serviseImg":"bg-xr","number":"Numbers: 27765","value":"xr"},{"cost":"0.00","id":183,"servise":"Global24","serviseImg":"bg-iz","number":"Numbers: 0","value":"iz"},{"cost":"0.03","id":184,"servise":"\u041c\u0412\u0438\u0434\u0435\u043e","serviseImg":"bg-tk","number":"Numbers: 27660","value":"tk"},{"cost":"0.00","id":185,"servise":"Sheerid","serviseImg":"bg-rx","number":"Numbers: 0","value":"rx"},{"cost":"0.00","id":186,"servise":"99app","serviseImg":"bg-ki","number":"Numbers: 0","value":"ki"},{"cost":"0.00","id":187,"servise":"CAIXA","serviseImg":"bg-my","number":"Numbers: 0","value":"my"},{"cost":"0.00","id":188,"servise":"OfferUp","serviseImg":"bg-zm","number":"Numbers: 0","value":"zm"},{"cost":"0.00","id":189,"servise":"Swvl","serviseImg":"bg-tq","number":"Numbers: 0","value":"tq"},{"cost":"0.00","id":190,"servise":"Haraj","serviseImg":"bg-au","number":"Numbers: 0","value":"au"},{"cost":"0.00","id":191,"servise":"Taksheel","serviseImg":"bg-ei","number":"Numbers: 0","value":"ei"},{"cost":"0.00","id":192,"servise":"hamrahaval","serviseImg":"bg-rp","number":"Numbers: 0","value":"rp"},{"cost":"0.00","id":193,"servise":"Gamekit","serviseImg":"bg-pa","number":"Numbers: 0","value":"pa"},{"cost":"0.00","id":194,"servise":" \u015eikayet var","serviseImg":"bg-fs","number":"Numbers: 0","value":"fs"},{"cost":"0.00","id":195,"servise":"Getir","serviseImg":"bg-ul","number":"Numbers: 0","value":"ul"},{"cost":"0.00","id":196,"servise":"irancell","serviseImg":"bg-cf","number":"Numbers: 0","value":"cf"},{"cost":"0.00","id":197,"servise":"Alfa","serviseImg":"bg-bt","number":"Numbers: 0","value":"bt"},{"cost":"0.00","id":198,"servise":"Disney Hotstar","serviseImg":"bg-ud","number":"Numbers: 0","value":"ud"},{"cost":"0.00","id":199,"servise":"Agroinform","serviseImg":"bg-qu","number":"Numbers: 0","value":"qu"},{"cost":"0.00","id":200,"servise":"humblebundle","serviseImg":"bg-un","number":"Numbers: 0","value":"un"},{"cost":"0.00","id":201,"servise":"Faberlic","serviseImg":"bg-rm","number":"Numbers: 0","value":"rm"},{"cost":"0.00","id":202,"servise":"CafeBazaar","serviseImg":"bg-uo","number":"Numbers: 0","value":"uo"},{"cost":"0.00","id":203,"servise":"cryptocom","serviseImg":"bg-ti","number":"Numbers: 0","value":"ti"},{"cost":"0.00","id":204,"servise":"Gittigidiyor","serviseImg":"bg-nk","number":"Numbers: 0","value":"nk"},{"cost":"0.00","id":205,"servise":"mzadqatar","serviseImg":"bg-jm","number":"Numbers: 0","value":"jm"},{"cost":"0.00","id":206,"servise":"Algida","serviseImg":"bg-lp","number":"Numbers: 0","value":"lp"},{"cost":"0.00","id":207,"servise":"Cita Previa","serviseImg":"bg-si","number":"Numbers: 0","value":"si"},{"cost":"0.00","id":208,"servise":"Potato Chat","serviseImg":"bg-fj","number":"Numbers: 0","value":"fj"},{"cost":"0.00","id":209,"servise":"Bitaqaty","serviseImg":"bg-pt","number":"Numbers: 0","value":"pt"},{"cost":"0.00","id":210,"servise":"Primaries 2020","serviseImg":"bg-qc","number":"Numbers: 0","value":"qc"},{"cost":"0.00","id":211,"servise":"Amasia","serviseImg":"bg-yo","number":"Numbers: 0","value":"yo"},{"cost":"0.00","id":212,"servise":"Dream11","serviseImg":"bg-ve","number":"Numbers: 0","value":"ve"},{"cost":"0.00","id":213,"servise":"Oriflame","serviseImg":"bg-qh","number":"Numbers: 0","value":"qh"},{"cost":"0.00","id":214,"servise":"Bykea","serviseImg":"bg-iu","number":"Numbers: 0","value":"iu"},{"cost":"0.00","id":215,"servise":"Immowelt","serviseImg":"bg-ib","number":"Numbers: 0","value":"ib"},{"cost":"0.00","id":216,"servise":"Digikala","serviseImg":"bg-zv","number":"Numbers: 0","value":"zv"},{"cost":"0.00","id":217,"servise":"Wing Money","serviseImg":"bg-jb","number":"Numbers: 0","value":"jb"},{"cost":"0.00","id":218,"servise":"Yaay","serviseImg":"bg-vn","number":"Numbers: 0","value":"vn"},{"cost":"0.00","id":219,"servise":"GameArena","serviseImg":"bg-wn","number":"Numbers: 0","value":"wn"},{"cost":"0.04","id":220,"servise":"Vita express","serviseImg":"bg-bj","number":"Numbers: 27861","value":"bj"},{"cost":"0.00","id":221,"servise":"Auchan","serviseImg":"bg-st","number":"Numbers: 0","value":"st"},{"cost":"0.00","id":222,"servise":"Picpay","serviseImg":"bg-ev","number":"Numbers: 0","value":"ev"},{"cost":"0.00","id":223,"servise":"Blued","serviseImg":"bg-qn","number":"Numbers: 0","value":"qn"},{"cost":"0.05","id":224,"servise":"Not on the list","serviseImg":"bg-ot","number":"Numbers: 19352","value":"ot"}]
for j in json_list:
n = i['number'].split()[-1]
print(n)
# do something interesting with n

Is there a way to programmatically combine Korean unicode into one?

Using a Korean Input Method Editor (IME), it's possible to type 버리 + 어 and it will automatically become 버려.
Is there a way to programmatically do that in Python?
>>> x, y = '버리', '어'
>>> z = '버려'
>>> ord(z[-1])
47140
>>> ord(x[-1]), ord(y)
(47532, 50612)
Is there a way to compute that 47532 + 50612 -> 47140?
Here's some more examples:
가보 + 아 -> 가봐
끝나 + ㄹ -> 끝날
I'm a Korean. First, if you type 버리 + 어, it becomes 버리어 not 버려. 버려 is an abbreviation of 버리어 and it's not automatically generated. Also 가보아 cannot becomes 가봐 automatically during typing by the same reason.
Second, by contrast, 끝나 + ㄹ becomes 끝날 because 나 has no jongseong(종성). Note that one character of Hangul is made of choseong(초성), jungseong(중성), and jongseong. choseong and jongseong are a consonant, jungseong is a vowel. See more at Wikipedia. So only when there's no jongseong during typing (like 끝나), there's a chance that it can have jongseong(ㄹ).
If you want to make 버리 + 어 to 버려, you should implement some Korean language grammar like, especially for this case, abbreviation of jungseong. For example ㅣ + ㅓ = ㅕ, ㅗ + ㅏ = ㅘ as you provided. 한글 맞춤법 chapter 4. section 5 (I can't find English pages right now) defines abbreviation like this. It's possible, but not so easy job especially for non-Koreans.
Next, if what you want is just to make 끝나 + ㄹ to 끝날, it can be a relatively easy job since there're libraries which can handle composition and decomposition of choseong, jungseong, jongseong. In case of Python, I found hgtk. You can try like this (nonpractical code):
# hgtk methods take one character at a time
cjj1 = hgtk.letter.decompose('나') # ('ㄴ', 'ㅏ', '')
cjj2 = hgtk.letter.decompose('ㄹ') # ('ㄹ', '', '')
if cjj1[2]) == '' and cjj2[1]) == '':
cjj = (cjj1[0], cjj1[1], cjj2[0])
cjj2 = None
Still, without proper knowledge of Hangul, it will be very hard to get it done.
You could use your own Translation table.
The drawback is you have to input all pairs manual or you have a file to get it from.
For instance:
# Sample Korean chars to map
k = [[('버리', '어'), ('버려')], [('가보', '아'), ('가봐')], [('끝나', 'ㄹ'), ('끝날')]]
class Korean(object):
def __init__(self):
self.map = {}
for m in k:
key = m[0][0] + m[0][1]
self.map[hash(key)] = m[1]
def __getitem__(self, item):
return self.map[hash(item)]
def translate(self, s):
return [ self.map[hash(token)] for token in s]
if __name__ == '__main__':
k_map = Korean()
k_chars = [ m[0][0] + m[0][1] for m in k]
print('Input: %s' % k_chars)
print('Output: %s' % k_map.translate(k_chars))
one_char_3 = k[0][0][0] + k[0][0][1]
print('%s = %s' % (one_char_3, k_map[ one_char_3 ]) )
Input: ['버리어', '가보아', '끝나ㄹ']
Output: ['버려', '가봐', '끝날']
버리어 = 버려
Tested with Python:3.4.2

How to replace text in curly brackets with another text based on comparisons using Python Regex

I am quiet new to regular expressions. I have a string that looks like this:
str = "abc/def/([default], [testing])"
and a dictionary
dict = {'abc/def/[default]' : '2.7', 'abc/def/[testing]' : '2.1'}
and using Python RE, I want str in this form, after comparisons of each element in dict to str:
str = "abc/def/(2.7, 2.1)"
Any help how to do it using Python RE?
P.S. its not the part of any assignment, instead it is the part of my project at work and I have spent many hours to figure out solution but in vain.
import re
st = "abc/def/([default], [testing], [something])"
dic = {'abc/def/[default]' : '2.7',
'abc/def/[testing]' : '2.1',
'bcd/xed/[something]' : '3.1'}
prefix_regex = "^[\w*/]*"
tag_regex = "\[\w*\]"
prefix = re.findall(prefix_regex, st)[0]
tags = re.findall(tag_regex, st)
for key in dic:
key_prefix = re.findall(prefix_regex, key)[0]
key_tag = re.findall(tag_regex, key)[0]
if prefix == key_prefix:
for tag in tags:
if tag == key_tag:
st = st.replace(tag, dic[key])
print st
OUTPUT:
abc/def/(2.7, 2.1, [something])
Here is a solution using re module.
Hypotheses :
there is a dictionary whose keys are composed of a prefix and a variable part, the variable part is enclosed in brackets ([])
the values are strings by which the variable parts are to be replaced in the string
the string is composed by a prefix, a (, a list of variable parts and a )
the variable parts in the string are enclosed in []
the variable parts in the string are separated by a comma followed by optional spaces
Python code :
import re
class splitter:
pref = re.compile("[^(]+")
iden = re.compile("\[[^]]*\]")
def __init__(self, d):
self.d = d
def split(self, s):
m = self.pref.match(s)
if m is not None:
p = m.group(0)
elts = self.iden.findall(s, m.span()[1])
return p, elts
return None
def convert(self, s):
p, elts = self.split(s)
return p + "(" + ", ".join((self.d[p + elt] for elt in elts)) + ")"
Usage :
s = "abc/def/([default], [testing])"
d = {'abc/def/[default]' : '2.7', 'abc/def/[testing]' : '2.1'}
sp = splitter(d)
print(sp.convert(s))
output :
abc/def/(2.7, 2.1)
Regex is probably not required here. Hope this helps
lhs,rhs = str.split("/(")
rhs1,rhs2 = rhs.strip(")").split(", ")
lhs+="/"
print "{0}({1},{2})".format(lhs,dict[lhs+rhs1],dict[lhs+rhs2])
output
abc/def/(2.7,2.1)

pretty print assertEqual() for HTML strings

I want to compare two strings in a python unittest which contain html.
Is there a method which outputs the result in a human friendly (diff like) version?
A simple method is to strip whitespace from the HTML and split it into a list. Python 2.7's unittest (or the backported unittest2) then gives a human-readable diff between the lists.
import re
def split_html(html):
return re.split(r'\s*\n\s*', html.strip())
def test_render_html():
expected = ['<div>', '...', '</div>']
got = split_html(render_html())
self.assertEqual(expected, got)
If I'm writing a test for working code, I usually first set expected = [], insert a self.maxDiff = None before the assert and let the test fail once. The expected list can then be copy-pasted from the test output.
You might need to tweak how whitespace is stripped depending on what your HTML looks like.
I submitted a patch to do this some years back. The patch was rejected but you can still view it on the python bug list.
I doubt you would want to hack your unittest.py to apply the patch (if it even still works after all this time), but here's the function for reducing two strings a manageable size while still keeping at least part of what differs. So long as all you didn't want the complete differences this might be what you want:
def shortdiff(x,y):
'''shortdiff(x,y)
Compare strings x and y and display differences.
If the strings are too long, shorten them to fit
in one line, while still keeping at least some difference.
'''
import difflib
LINELEN = 79
def limit(s):
if len(s) > LINELEN:
return s[:LINELEN-3] + '...'
return s
def firstdiff(s, t):
span = 1000
for pos in range(0, max(len(s), len(t)), span):
if s[pos:pos+span] != t[pos:pos+span]:
for index in range(pos, pos+span):
if s[index:index+1] != t[index:index+1]:
return index
left = LINELEN/4
index = firstdiff(x, y)
if index > left + 7:
x = x[:left] + '...' + x[index-4:index+LINELEN]
y = y[:left] + '...' + y[index-4:index+LINELEN]
else:
x, y = x[:LINELEN+1], y[:LINELEN+1]
left = 0
cruncher = difflib.SequenceMatcher(None)
xtags = ytags = ""
cruncher.set_seqs(x, y)
editchars = { 'replace': ('^', '^'),
'delete': ('-', ''),
'insert': ('', '+'),
'equal': (' ',' ') }
for tag, xi1, xi2, yj1, yj2 in cruncher.get_opcodes():
lx, ly = xi2 - xi1, yj2 - yj1
edits = editchars[tag]
xtags += edits[0] * lx
ytags += edits[1] * ly
# Include ellipsis in edits line.
if left:
xtags = xtags[:left] + '...' + xtags[left+3:]
ytags = ytags[:left] + '...' + ytags[left+3:]
diffs = [ x, xtags, y, ytags ]
if max([len(s) for s in diffs]) < LINELEN:
return '\n'.join(diffs)
diffs = [ limit(s) for s in diffs ]
return '\n'.join(diffs)
Maybe this is a quite 'verbose' solution. You could add a new 'equality function' for your user defined type (e.g: HTMLString) which you have to define first:
class HTMLString(str):
pass
Now you have to define a type equality function:
def assertHTMLStringEqual(first, second):
if first != second:
message = ... # TODO here: format your message, e.g a diff
raise AssertionError(message)
All you have to do is format your message as you like. You can also use a class method in your specific TestCase as a type equality function. This gives you more functionality to format your message, since unittest.TestCase does this a lot.
Now you have to register this equality function in your unittest.TestCase:
...
def __init__(self):
self.addTypeEqualityFunc(HTMLString, assertHTMLStringEqual)
The same for a class method:
...
def __init__(self):
self.addTypeEqualityFunc(HTMLString, 'assertHTMLStringEqual')
And now you can use it in your tests:
def test_something(self):
htmlstring1 = HTMLString(...)
htmlstring2 = HTMLString(...)
self.assertEqual(htmlstring1, htmlstring2)
This should work well with python 2.7.
I (the one asking this question) use BeautfulSoup now:
def assertEqualHTML(string1, string2, file1='', file2=''):
u'''
Compare two unicode strings containing HTML.
A human friendly diff goes to logging.error() if there
are not equal, and an exception gets raised.
'''
from BeautifulSoup import BeautifulSoup as bs
import difflib
def short(mystr):
max=20
if len(mystr)>max:
return mystr[:max]
return mystr
p=[]
for mystr, file in [(string1, file1), (string2, file2)]:
if not isinstance(mystr, unicode):
raise Exception(u'string ist not unicode: %r %s' % (short(mystr), file))
soup=bs(mystr)
pretty=soup.prettify()
p.append(pretty)
if p[0]!=p[1]:
for line in difflib.unified_diff(p[0].splitlines(), p[1].splitlines(), fromfile=file1, tofile=file2):
logging.error(line)
raise Exception('Not equal %s %s' % (file1, file2))

Displaying prices

I'm getting prices in different currencies and want to display Brazilian R$
My formatting doesn't work and the display looks like this:
Price: 1.15..000.,00 R$
For good flexibility I've stored the price as a string: price=db.StringProperty(verbose_name="price")
I tried to implement my own filter and it didn't work:
{{ ad.price|separate }} R$
def separate(n, sep='.'):
ln = list(str(n))
ln.reverse()
newn = []
while len(ln) > 3:
newn.extend(ln[:3])
newn.append(sep)
ln = ln[3:]
newn.extend(ln)
newn.reverse()
return "".join(newn)
Can you help me? Should I just remove the filter? Should I enforce some regex to the input instead? A link to my site is http://www.koolbusiness.com/servead/4252196
UPDATE: I'm considering using something like one of these filters:
import locale
locale.setlocale(locale.LC_ALL, '')
def currency(value): # doesn't work
locale.setlocale(locale.LC_ALL, '')
return locale.currency(value, grouping=True)
register.filter(currency)
def currencyWithoutUsingLocale(value): # needs adjustment
value=float(value)
symbol = '$'
thousand_sep = ''
decimal_sep = ''
# try to use settings if set
try:
symbol = settings.CURRENCY_SYMBOL
except AttributeError:
pass
try:
thousand_sep = settings.THOUSAND_SEPARATOR
decimal_sep = settings.DECIMAL_SEPARATOR
except AttributeError:
thousand_sep = ','
decimal_sep = '.'
intstr = str(int(value))
f = lambda x, n, acc=[]: f(x[:-n], n, [(x[-n:])]+acc) if x else acc
intpart = thousand_sep.join(f(intstr, 3))
return "%s%s%s%s" % (symbol, intpart, decimal_sep, ("%0.2f" % value)[-2:])
register.filter(currencyWithoutUsingLocale)
Storing the price as a string is the first problem. It should be a Decimal. If you look at the Python standard library documentation for Decimal, you will see this http://docs.python.org/library/decimal.html#recipes
That moneyfmt recipe should do what you want
Currency formatting is a feature of locale.
http://docs.python.org/library/locale.html#locale.currency
You can use locale._override_localeconv dict to set your own overwrites:
>>> import locale
>>> locale.setlocale(locale.LC_MONETARY, 'pt_BR.UTF-8')
>>> locale.currency(1234.56)
'1234,56 R$'
>>> locale._override_localeconv.update({'p_cs_precedes': 1, 'n_cs_precedes': 1})
>>> locale.currency(1234.56)
'R$ 1234,56'
You can use this locale._override_localeconv.update({'p_cs_precedes': 1, 'n_cs_precedes': 1}) line right after the import locale, if you want.

Categories

Resources