从原始字符串中提取价格和货币
项目描述
price-parser 是一个小型库,用于从原始文本字符串中提取价格和货币。
特性
强大的价格金额和货币符号提取
零成本处理千位分隔符和小数分隔符
主要用例是从网页中提取价格。例如,您可以编写一个CSS/XPath选择器,针对具有价格的元素,然后使用此库进行清理,而不是编写特定于站点的正则表达式或Python代码。
许可证是BSD 3条款。
安装
pip install price-parser
price-parser 需要 Python 3.6+。
使用
基本用法
>>> from price_parser import Price >>> price = Price.fromstring("22,90 €") >>> price Price(amount=Decimal('22.90'), currency='€') >>> price.amount # numeric price amount Decimal('22.90') >>> price.currency # currency symbol, as appears in the string '€' >>> price.amount_text # price amount, as appears in the string '22,90' >>> price.amount_float # price amount as float, not Decimal 22.9
如果您愿意,Price.fromstring有一个别名price_parser.parse_price,它们做的是同一件事
>>> from price_parser import parse_price >>> parse_price("22,90 €") Price(amount=Decimal('22.90'), currency='€')
该库具有广泛的测试(900+真实世界的价格字符串示例)。以下是一些支持的案例描述。
支持的案例
支持各种货币的杂乱的价格字符串;处理千位分隔符和小数分隔符
>>> Price.fromstring("Price: $119.00") Price(amount=Decimal('119.00'), currency='$')
>>> Price.fromstring("15 130 Р") Price(amount=Decimal('15130'), currency='Р')
>>> Price.fromstring("151,200 تومان") Price(amount=Decimal('151200'), currency='تومان')
>>> Price.fromstring("Rp 1.550.000") Price(amount=Decimal('1550000'), currency='Rp')
>>> Price.fromstring("Běžná cena 75 990,00 Kč") Price(amount=Decimal('75990.00'), currency='Kč')
欧元符号在任意情况下用作小数分隔符
>>> Price.fromstring("1,235€ 99") Price(amount=Decimal('1235.99'), currency='€')
>>> Price.fromstring("99 € 95 €") Price(amount=Decimal('99'), currency='€')
>>> Price.fromstring("35€ 999") Price(amount=Decimal('35'), currency='€')
处理一些特殊案例
>>> Price.fromstring("Free") Price(amount=Decimal('0'), currency=None)
当无法提取价格或货币时,相应的属性值设置为 None
>>> Price.fromstring("") Price(amount=None, currency=None)
>>> Price.fromstring("Foo") Price(amount=None, currency=None)
>>> Price.fromstring("50% OFF") Price(amount=None, currency=None)
>>> Price.fromstring("50") Price(amount=Decimal('50'), currency=None)
>>> Price.fromstring("R$") Price(amount=None, currency='R$')
货币提示
currency_hint 参数允许传入可能(或可能不)包含货币信息的文本字符串。此功能对于自动提取价格非常有用。
>>> Price.fromstring("34.99", currency_hint="руб. (шт)") Price(amount=Decimal('34.99'), currency='руб.')
请注意,主价格字符串中提到的货币可能比 currency_hint 参数中指定的货币更受青睐;这取决于那里找到的货币符号。如果您知道正确的货币,可以直接设置它。
>>> price = Price.fromstring("1 000") >>> price.currency = 'EUR' >>> price Price(amount=Decimal('1000'), currency='EUR')
小数分隔符
如果您知道输入字符串中使用的符号作为小数分隔符,请通过 decimal_separator 参数传递该符号,以防止价格解析器猜测错误的小数分隔符符号。
>>> Price.fromstring("Price: $140.600", decimal_separator=".") Price(amount=Decimal('140.600'), currency='$')
>>> Price.fromstring("Price: $140.600", decimal_separator=",") Price(amount=Decimal('140600'), currency='$')
贡献
使用 tox 在不同的 Python 版本上运行测试
tox
上面的命令还会运行类型检查;我们使用 mypy。
变更
0.3.4 (2020-11-25)
改进了对小数点前无数字的价格的解析(例如,“.75”),https://github.com/scrapinghub/price-parser/pull/42
修复了带有非换行空格的价格的解析https://github.com/scrapinghub/price-parser/pull/43
0.3.3 (2020-02-05)
修复了某些 Windows 机器上的安装问题。
0.3.2 (2020-01-28)
改进了韩元和日元的货币检测。
声明支持 Python 3.8。
0.3.1 (2019-10-21)
冗余的美元符号不再作为货币的一部分返回,例如,对于 SGD$ 100,货币将是 SGD,而不是 SGD$。
0.3.0 (2019-10-19)
新的 Price.fromstring 参数 decimal_separator 允许在已知的情况下覆盖小数分隔符(即禁用小数分隔符检测);
添加了非官方货币名称 NTD 和 RBM;
正则表达式中的量词变为非贪婪的,这提供了一些速度提升;
测试改进。
0.2.4 (2019-07-03)
声明 price-parser 提供类型注解(pep-561)。这使使用 price-parser 的项目能够进行更好的类型检查。
提高了测试覆盖率
0.2.3 (2019-06-18)
针对 0.2.2 版本的后续改进:改进了解析小数点后具有 4+ 位数字的价格。
0.2.2 (2019-06-18)
修复了解析小数点后具有 4+ 位数字的价格。
0.2.1 (2019-04-19)
添加了 23 个额外的货币符号;
A$ 是澳大利亚元的别名。
0.2 (2019-04-12)
添加了对被欧元取代的货币的支持。
0.1.1 (2019-04-12)
进行了小的打包修复。
0.1 (2019-04-12)
初始发布。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。