繁体   English   中英

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

[英]Parse string into different types

我已经看过此解决方案,但我的要求略有不同。

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

我知道我可以使用str.split(" ")将字符串分成其组成部分,但随后我必须将2nd和3rd参数转换为int 因此,以下命令将不起作用(当int在字符串中遇到"download"时,它会失败):

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

我对Python还是很陌生...所以我想知道是否有一种不错的pythonic方式来实现我的目标?

您可以将类型映射到值:

>>> 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)

这取决于您对“ pythonic”的含义的理解,但这是另一种方式:

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

标准库中没有其他Pythonic。 我建议您做一些简单的事情,例如:

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

您总是可以尝试寻找一个小解析器,但是那太过分了。

这里,我导入了以下函数,该函数使用isdigit() (请参见此处)

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

您可以这样做。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM