2 回答
TA贡献1909条经验 获得超7个赞
您可以使用区域设置模块将价格表示法转换为浮点值。
>>> import locale
>>> locale.atof("1,000.99")
1000.99
或者,如果您只想要整数值:
>>> locale.atoi("1,000")
1000
根据您的配置,您可能需要:
locale.setlocale(locale.LC_NUMERIC,'')
也可能工作:
locale.setlocale(locale.LC_ALL, 'en_US.UTF8')
正如其他人所建议的那样,您只需删除逗号并转换为浮点数:
price = float(limited['BestPrice'].replace(',', ''))
但是,最好熟悉本地化资源以获得更专业的解决方案。
要跳过无效的数字字符串(如空字符串),请执行以下操作:
for limited in requests.get('...').json():
try:
price = locale.atof(limited['BestPrice'])
# or
# price = float(limited['BestPrice'].replace(',', ''))
if price < lowestprice:
limitedname = limited['Name']
limitedurl = limited['AbsoluteUrl']
lowestprice = price
except ValueError as ve:
print(f"Hit a non-numeric value for {limited['Name']} for price: {ve}")
print(colored(f"{limitedname}: {lowestprice}\n{limitedurl}\n"))
sleep(1)
TA贡献1876条经验 获得超6个赞
添加此示例代码是希望它能帮助您了解正在发生的事情,尽管@Todd肯定涵盖了您需要从多个不同角度执行的操作。
import locale
locale.setlocale(locale.LC_NUMERIC,'')
import requests
for limited in requests.get('https://search.roblox.com/catalog/json?Catalog'\
'Context=1&Keyword=&SortType=0&SortAggregation='\
'3&SortCurrency=0&LegendExpanded=true&Categ'\
'ory=2&pageNumber=1').json():
if limited['BestPrice'] == '':
print('This one is empty')
else:
print(locale.atof(limited['BestPrice']))
结果:
4195.0
6997.0
2200.0
8149.0
4291.0
2850.0
3299.0
1998.0
23000.0
3000.0
14500.0
10994.0
3996.0
1249.0
3799.0
6499.0
843.0
3100.0
1300.0
680.0
2049.0
2491.0
4099.0
2499.0
2959.0
10500.0
855.0
8698.0
2700.0
3500.0
19500.0
5199.0
8999.0
55555.0
2844.0
2299.0
5000.0
1399.0
699420.0
This one is empty
55000.0
4400.0
这些是迭代 json 时出现的最佳价格值。这些是您需要使用的值。其中一个是空字符串。limited
添加回答
举报