python中的scanf[英] scanf in python

问题描述

你好,

我经常需要解析包含混合字符的字符串,
整数和浮点数,C语言的scanf函数非常实用
这个目的.
我一直在寻找这样的功能,我很惊讶
发现早在 2001 年就已经讨论过了,但从来没有
实施的.推荐的方法似乎是使用 split 然后
atoi 或 atof 或使用正则表达式,然后使用 atoi 和 atof.两种方法
似乎比 scanf 不那么自然,也更麻烦.如果
python 已经有一个 % 字符串操作符,其行为类似于 printf,为什么不呢
实现 %% 或 <<字符串运算符的行为类似于 scanf,使用
可能像下面这样:

a, b, c = "%d %f %5c"%% "1 2.0 abcde"



a, b, c = "%d %f %5c"<<"1 2.0 abcde"

%% 更接近于 % 运算符

<<对我来说似乎更直观

在我看来,这两种方法中的任何一种都比:

lst = "1 2;0 abcde".split()
a = int(lst[0])
b = 浮动(lst[1])
c = lst[2]

甚至在使用正则表达式解析如此简单的输入时更糟.

我喜欢python,因为它简洁易读,我真的觉得
它可以使用这样的运算符.

我知道这已经讨论过很多次了,但是之前的所有
我发现的线程似乎已经死了,我想进一步邀请
调查这个话题.

干杯,

André M. Descombes

推荐答案

AMD schrieb:
你好,

我经常需要解析包含混合字符的字符串,
整数和浮点数,C语言的scanf函数非常实用
这个目的.
我一直在寻找这样的功能,我很惊讶
发现早在 2001 年就已经讨论过了,但从来没有
实施的.推荐的方法似乎是使用 split 然后
atoi 或 atof 或使用正则表达式,然后使用 atoi 和 atof.两种方法
似乎比 scanf 不那么自然,也更麻烦.如果
python 已经有一个 % 字符串操作符,其行为类似于 printf,为什么不呢
实现 %% 或 <<字符串运算符的行为类似于 scanf,使用
可能是这样的:

a, b, c = "%d %f %5c"%% "1 2.0 abcde"



a, b, c = "%d %f %5c"<<"1 2.0 abcde"

%% 更接近于 % 运算符

<<对我来说似乎更直观

在我看来,这两种方法中的任何一种都比:

lst = "1 2;0 abcde".split()
a = int(lst[0])
b = 浮动(lst[1])
c = lst[2]

甚至在使用正则表达式解析这样简单的输入时更糟.

我喜欢python,因为它简洁易读,我真的觉得
它可以使用这样的运算符.

我知道这已经讨论过很多次了,但是之前的所有
我发现的线程似乎已经死了,我想进一步邀请
本课题的调查.
我很确定 python 不会为此增加额外的运算符.
然而,您可以自由地创建一个 scanf 实现作为 3rd-party-module.

恕我直言,该方法的可用性非常有限.首先,
捕获多个输入标记的需要*非常*很少 - 几乎
我知道的所有命令行工具都需要交互式用户输入
(如 linux 内核配置工具)通过提供
逐行输入值(包括默认值,你不能做的事情
用你的方法),甚至是带有curses的以对话为中心的值输入.

所以 - 我怀疑你会在这方面获得很大的动力.祝你好运.
迪兹

>
我很确定 python 不会为此增加额外的运算符.
然而,您可以自由地创建一个 scanf 实现作为 3rd-party-module.

恕我直言,该方法的可用性非常有限.首先,
捕获多个输入标记的需要*非常*很少 - 几乎
我知道的所有命令行工具都需要交互式用户输入
(如 linux 内核配置工具)通过提供
逐行输入值(包括默认值,你不能做的事情
用你的方法),甚至是带有curses的以对话为中心的值输入.

所以 - 我怀疑你会在这方面获得很大的动力.祝你好运.
迪兹
其实挺普通的,不是用来处理文件的
读取参数.您可以在需要阅读简单的时候使用它
csv 文件或固定格式文件,其中包含多行,多行
每行字段.
该方法的优点是它结合了解析和
将字段转换为一项操作.
使用简单格式化字符串的另一个好处是它允许
为了方便翻译这些行,就像您使用 %
输出运算符.我不明白为什么 python 可以有一个运算符 for
输出但不能有输入,只是不对称.
我不明白为什么你不能使用这种方法来逐行输入值,
只需在 %s 或 %d 之间添加 \n.
该方法用途广泛,比正则表达式简单得多
加上之后的转换.

安德烈

AMD 写道:
你好,

我经常需要解析包含混合字符的字符串,
整数和浮点数,C语言的scanf函数非常实用
这个目的.
我一直在寻找这样的功能,我很惊讶
发现早在 2001 年就已经讨论过了,但从来没有
实施的.
Google 的第二次点击是 scanf 的纯 Python 实现.

http://hkn.eecs.berkeley.edu/~dyoo/python/scanf/

--
罗伯特·克恩

"我开始相信整个世界都是一个谜,一个无害的谜
我们自己疯狂地试图将它解释为好像它有一个潜在的真相."
-- 翁贝托·埃科


本文地址:https://www.itbaoku.cn/post/1050744.html