将Python货币代码转换为列表
有没有人知道怎么在Python 2.5里获取所有三字母的货币代码?比如说这些代码可以在这个网站上找到:http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/currency_codes/currency_codes_list-1.htm。需要注意的是,我不想用屏幕抓取的方式,因为代码需要在离线状态下运行——这个网站只是个例子。
看起来可以用locale库来实现这个功能,但我看文档的时候不太明白,而且总比把这些代码复制粘贴到文件里要好吧!
为了更清楚地说明问题,在C#中,针对同样的问题,下面的代码就很简洁地使用了内部的locale库:
CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(c => new RegionInfo(c.LCID).CurrencySymbol)
.Distinct()
我希望在Python中也能找到类似的解决方案。感谢所有提供答案的人!
2 个回答
1
你可以从geonames网站获取货币代码和其他相关数据。下面是一段代码,它可以下载这些数据(如果你想离线使用,可以把文件保存在本地),并把数据填充到一个列表里:
import urllib2
data = urllib2.urlopen('http://download.geonames.org/export/dump/countryInfo.txt')
ccodes = []
for line in data.read().split('\n'):
if not line.startswith('#'):
line = line.split('\t')
try:
if line[10]:
ccodes.append(line[10])
except IndexError:
pass
ccodes = list(set(ccodes))
ccodes.sort()
2
这段话的意思是,虽然方法不是特别优雅或者聪明,但你可以先生成一个列表,然后保存起来以后再用:
import urllib, re
url = "http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/currency_codes/currency_codes_list-1.htm"
print re.findall(r'\<td valign\="top"\>\s+([A-WYZ][A-Z]{2})\s+\</td\>', urllib.urlopen(url).read())
输出结果:
['AFN', 'EUR', 'ALL', 'DZD', 'USD', 'EUR', 'AOA', 'ARS', 'AMD', 'AWG', 'AUD',
...
'UZS', 'VUV', 'EUR', 'VEF', 'VND', 'USD', 'USD', 'MAD', 'YER', 'ZMK', 'ZWL', 'SDR']
需要注意的是,你要把X后面的内容删掉,因为那些名字是保留的,这意味着你会得到一个多余的条目(SDR,就是最后那个),你可以自己把它删掉。