【发布时间】:2013-02-01 02:05:24
【问题描述】:
许多编程语言的标准库都包含一个“扫描器 API”,用于从文本输入流中提取字符串、数字或其他对象。 (例如Java包含Scanner类,C++包含istream,C包含scanf)。
在 Python 中 this 的等价物是什么?
Python 有一个流接口,即继承自 io.IOBase 的类。但是,Python TextIOBase 流接口仅提供面向行的输入的功能。在reading the documentation 和searching on Google 之后,我在标准Python 模块中找不到可以让我从文本流中提取整数或将下一个以空格分隔的单词提取为字符串的内容。是否有任何标准设施可以做到这一点?
【问题讨论】:
-
如果输入很脏/随意,我倾向于使用
re模块;如果输入是结构化的,我更喜欢 simpleparse 之类的解析器库(EBNL 比正则表达式更容易维护)。 -
如果您确实有一个用例,也许更新您的问题而不是进行一般查询会更有效率。
-
re模块可用于专门模拟sscanf- 但是它并不真正等同于scanf系列函数。scanf系列函数是面向流的,而re是面向 string 的。例如,fscanf会自动从文件输入流中逐个字符地读取,而re则需要预先形成完整的字符串。 -
@Channel72 除非你先
mmap文件(因此像一个非常大的字符串一样尝试它而不将其加载到内存),然后使用re.finditer(可能保持一些位置,通过如果需要,可以到另一个查找器,或其他任何)
标签: python python-3.x stream scanf