首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的sscanf

Python中的sscanf
EN

Stack Overflow用户
提问于 2010-02-01 14:38:38
回答 13查看 132.2K关注 0票数 75

我正在寻找一个与Python中的sscanf()等价物。我想解析/proc/net/*文件,在C中我可以这样做:

代码语言:javascript
复制
int matches = sscanf(
        buffer,
        "%*d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %*X %*X:%*X %*X:%*X %*X %*d %*d %ld %*512s\n",
        local_addr, &local_port, rem_addr, &rem_port, &inode);

一开始我想使用str.split,但是它不拆分给定的字符,而是将sep字符串作为一个整体:

代码语言:javascript
复制
>>> lines = open("/proc/net/dev").readlines()
>>> for l in lines[2:]:
>>>     cols = l.split(string.whitespace + ":")
>>>     print len(cols)
1

它应该返回17,如上所述。

在标准库中,有没有等同于sscanf (而不是RE)的Python,或者字符串拆分函数,它可以拆分我不知道的字符范围中的任何字符?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-02-01 14:51:50

Python没有与sscanf等效的内置工具,大多数情况下,通过直接处理字符串、使用正则表达式或使用解析工具来解析输入实际上更有意义。

可能对翻译C语言最有用的可能是,人们已经实现了sscanf,例如在这个模块中:http://hkn.eecs.berkeley.edu/~dyoo/python/scanf/

在这种特殊情况下,如果您只想根据多个拆分字符拆分数据,re.split确实是正确的工具。

票数 36
EN

Stack Overflow用户

发布于 2012-10-12 12:18:50

还有parse模块。

parse()被设计成与format()相反(Python2.6及更高版本中较新的字符串格式化函数)。

代码语言:javascript
复制
>>> from parse import parse
>>> parse('{} fish', '1')
>>> parse('{} fish', '1 fish')
<Result ('1',) {}>
>>> parse('{} fish', '2 fish')
<Result ('2',) {}>
>>> parse('{} fish', 'red fish')
<Result ('red',) {}>
>>> parse('{} fish', 'blue fish')
<Result ('blue',) {}>
票数 88
EN

Stack Overflow用户

发布于 2012-06-18 22:55:37

当我处于C状态时,我通常使用zip和list来理解类似scanf的行为。如下所示:

代码语言:javascript
复制
input = '1 3.0 false hello'
(a, b, c, d) = [t(s) for t,s in zip((int,float,strtobool,str),input.split())]
print (a, b, c, d)

注意,对于更复杂的格式字符串,您确实需要使用正则表达式:

代码语言:javascript
复制
import re
input = '1:3.0 false,hello'
(a, b, c, d) = [t(s) for t,s in zip((int,float,strtobool,str),re.search('^(\d+):([\d.]+) (\w+),(\w+)$',input).groups())]
print (a, b, c, d)

另请注意,您需要为所有要转换的类型提供转换函数。例如,上面我使用了类似如下的内容:

代码语言:javascript
复制
strtobool = lambda s: {'true': True, 'false': False}[s]
票数 68
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2175080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档