一个小的scanf实现
scanf的Python项目详细描述
scanf:python的一个小型scanf实现
python有强大的正则表达式,但它们完全可以 在很多简单的情况下都是杀伤力过剩。另外,一些常见的 数字格式需要相当复杂的正则表达式来匹配它们 很强壮。scanf的python实现在内部转换了 将scanf格式转换为正则表达式,然后返回解析的值。
用法
scanf.scanf(格式,s=none,collapsewhitespace=true)
参数
- 格式:这是由纯文本和 下表。
- s:要分析的字符串
- collapsewhitespace:为真时,告诉scanf执行贪婪匹配 输入字符串中的空白,允许轻松解析 被格式化为更容易阅读。这样可以在日志文件中更好地匹配 已格式化以便于阅读。这些案子有变数 列之间的空白量,取决于 数据本身中的字符。
scanf支持以下格式:
Pattern | Meaning |
---|---|
%c | One character |
%5c | 5 characters |
%d, %i | int value |
%7d, %7i | int value with length 7 |
%f | float value |
%o | octal value |
%X, %x | hex value |
%s | string terminated by whitespace |
任何在%(e.g.,'%*f')后带有*的模式都将导致scanf与模式匹配,但是 从结果中省略匹配部分。这有助于 输入字符串可能会更改,但应忽略。
底层regex操作是使用“search”而不是“match”执行的, 因此,如果模式字符串与行中的任何位置匹配,scanf将返回匹配。
示例:
>>> from scanf import scanf
>>> scanf("%s - %d errors, %d warnings", "/usr/sbin/sendmail - 0 errors, 4 warnings")
('/usr/sbin/sendmail', 0, 4)
>>> scanf("%o %x %d", "0123 0x123 123")
(83, 291, 123)
>>> pattern = 'Power: %f [%], %s, Stemp: %f'
>>> text = 'Power: 0.0 [%], Cool, Stemp: 23.73'
>>> scanf(pattern, text)
(0.0, 'Cool', 23.73)
>>> pattern = 'Power: %f [%], %*s, Stemp: %f' # note the '*' in %*s
>>> scanf(pattern, text)
(0.0, 23.73)
如果输入模式匹配,scanf将返回解析值的元组;如果格式不匹配,则返回none。
其他资源
有关详细信息,请参见:
原始(1.0以前版本)代码来自: http://code.activestate.com/recipes/502213-simple-scanf-implementation/
释放量
1.5.1:2018-10-04
- 已修复安装问题
1.5.1:2018-10-04
- 通过backports.functools_lru_缓存重新添加了Python2.7兼容性(感谢@eendebakpt!)
1.5:2018-10-01
- 修正了python 3.7的兼容性(由于re.sub中的差异,scanf_compile在3.7中中断)
- 已将缓存更改为functools.lru_缓存(在Python3标准库中)
- 放弃对python 2的支持,因为lru缓存不在python 2标准库中
- 缓存现在考虑了collapsewhitespace(谢谢@prittenhouse!)
1.4.1:2017-04-05
- 在“scanf_compile”中将$^字符添加到要转义的特殊字符列表中。谢谢@michaelwedel!
1.4:2016-12-03
- 对scanf.py进行了小修改,以增强python3的兼容性。谢谢@gattocrucco!
- 将readme.md更改为readme.rst,删除setup.py中的pypandoc依赖项
- 删除了scanf.py开头的大部分评论,因为它们是 与自述文件中的内容无关。
1.3.1-1.3.3:2016-06-23
- PYPI的初始版本
- 修复了pypi元数据的各种问题
1.3:2016-01-18
- 添加了“ExtractData”函数。
1.2:2013-05-30
- 添加了“collapsewhitespace”标志(默认为true)以进行搜索 字符串并用regex字符串替换所有空格以匹配重复的 空白。这样可以在日志文件中更好地匹配 已格式化以便于阅读。这些案子有变数 列之间的空白量,取决于 数据本身中的字符。
1.1:2010-10-13
- 将regex从“match”(仅在行首匹配)更改为 “搜索”(匹配行中的任何位置)
- 错误修复-忽略跳过字段的强制转换
1.0:2010-10-11
- 初始版本(内部)