假设我想读取一个输入序列,其中每个输入是一个元组,其格式为<string> , <integer>, <string>
。此外,逗号周围可以有任意数量的空格。在C / C ++中执行此操作的一种简单方法是将scanf
与格式字符串"%s , %d , %s"
一起使用。 python中的等效函数是什么?
假设我们知道每个输入都在单独的行上,那么您可以使用split
和strip
在python中轻松解析此输入。但是换行符的要求使事情变得复杂。此外,我们甚至可以输入诸如
<s11>, <i1>
, <s12> <s21>,
<i2> , <s22>
其中s11, i1, s12
是第一个输入,s21, i2, s22
是第二个输入。 scanf仍然可以处理此问题。如何在python中做到这一点?我也不想立即获取整个输入并进行解析,因为我知道以后还会有其他输入不适合这种格式,并且我不想手动进行解析。>
答案 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 ']