在python中使用格式字符串读取输入

时间:2018-11-01 14:19:00

标签: python input scanf

假设我想读取一个输入序列,其中每个输入是一个元组,其格式为<string> , <integer>, <string>。此外,逗号周围可以有任意数量的空格。在C / C ++中执行此操作的一种简单方法是将scanf与格式字符串"%s , %d , %s"一起使用。 python中的等效函数是什么?

假设我们知道每个输入都在单独的行上,那么您可以使用splitstrip在python中轻松解析此输入。但是换行符的要求使事情变得复杂。此外,我们甚至可以输入诸如

<s11>, <i1> , <s12> <s21>, <i2> , <s22> 其中s11, i1, s12是第一个输入,s21, i2, s22是第二个输入。 scanf仍然可以处理此问题。如何在python中做到这一点?我也不想立即获取整个输入并进行解析,因为我知道以后还会有其他输入不适合这种格式,并且我不想手动进行解析。

2 个答案:

答案 0 :(得分:1)

您应该能够先去除空格,然后以逗号分隔,然后根据需要处理结果字符串和整数。正则表达式s\+与任何非零数量的空格字符匹配:

input_string = "    hello     \n  \t   ,    10  ,   world   \n     "
stripped_string = re.sub('\s+', '', input_string)
substrings = stripped_string.split(',')
string1 = substrings[0]
integer1 = int(substrings[1])
string2 = substrings[2]

如果您需要连续处理多个s,i,s元组,只需将最后三行放入循环中。

编辑:我意识到现在您想将任何空格解释为。我不确定这是多么明智,但是一种不明智的做法是将所有逗号替换为空格,在空格上分割,然后将其命名为

input_string = "    hello     \n  \t   ,    10     world   \n     "
stripped_string = re.sub(',', ' ', input_string)
substrings = stripped_string.split()
string1 = substrings[0]
integer1 = int(substrings[1])
string2 = substrings[2]

答案 1 :(得分:0)

对于定界格式,使用csv模块非常容易。 您可以在其中插入任何类型的file-like inputs

然后您将处理空格并在下游键入强制转换。这是使您前进的示例:

In [25]: import fileinput

In [26]: import csv

In [28]: reader = csv.reader(fileinput.input())

In [29]: for l in reader:
    ...:     print(l)
    ...:
stdin input -> a,b, c, d
print output -> ['a', 'b', ' c', ' d   ']