将字符串解析为不同的类型

时间:2017-05-14 13:47:36

标签: python string

我看过这个solution,但我的要求略有不同。

我有一个表格形式的字符串:"command int1 int2",例如"download 600 10"

我知道我可以使用str.split(" ")将字符串分解为其组成部分,但之后我必须将第2和第3个参数转换为int s。因此,以下内容不起作用(int强制转换在字符串中遇到"download"时失败:

(cmd, int1, int2) = [int(s) for s in file.split(' ')]

我仍然对Python很陌生......所以我想知道是否有一种很好的,pythonic方式来实现我的目标?

5 个答案:

答案 0 :(得分:4)

您可以将类型映射到值:

>>> types = (str, int, int)
>>> string = 'download 600 10'
>>> cmd, int1, int2 = [type(value) for type, value in zip(types, string.split())]

>>> cmd, int1, int2
('download', 600, 10)

答案 1 :(得分:1)

这取决于你对什么" pythonic"对你而言意味着,但这是另一种方式:

words = file.split(" ")
cmd, (int1, int2) = words[0], map(int, words[1:])

答案 2 :(得分:1)

标准库中没有更多Pythonic。我建议你做一些简单的事情,比如:

cmd = file.split(' ')
command = cmd[0]
arg1 = int(cmd[1])
arg2 = int(cmd[2])

你总是可以尝试寻找一个小解析器,但这样就太过分了。

答案 3 :(得分:1)

here我导入了以下函数,该函数使用 isdigit() (see here)

def check_int(s): # check if s is a positive or negative integer
    if s[0] in ('-', '+'):
        return s[1:].isdigit()
    return s.isdigit()

然后你只需要这段代码:

your_string = "download 600 10" 
elements = your_string.split(" ")
goal = [int(x) for x in elements if check_int(x)]

cmd, (int1,int2) = elements[0], goal

答案 4 :(得分:0)

你可以这样做。

file = "downlaod 600 10"
file_list = file.split(' ')
for i in range(len(file_list)):
 try:
   file_list[i] = int(file_list[i])
 except ValueError:
    pass    
(cmd, int1, int2) = file_list