将Python货币代码转换为列表

3 投票
2 回答
3242 浏览
提问于 2025-04-16 10:11

有没有人知道怎么在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,就是最后那个),你可以自己把它删掉。

撰写回答