0

I have looked at this solution but my requirements are slightly different.

I have a string of the form: "command int1 int2", e.g. "download 600 10".

I know I could use str.split(" ") to break the string into its component parts but then I would have to convert the 2nd and 3rd parameters to ints. Thus the following won't work (the int cast fails when it encounters "download" in the string):

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

I'm still pretty new to Python... so I'm wondering if there is a nice, pythonic way to accomplish my goal?

5 Answers 5

5

You could maps types to values:

>>> 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)
Sign up to request clarification or add additional context in comments.

2 Comments

No problem, enjoy.
def strToTypes(string, types_tuple): array = [type(value) for type, value in zip(types_tuple, string.split())] return array noun, n1, n2 = strToTypes("noun 3 4", (str, int, float)) print(noun, n1, n2)
1

It depends on your take on what "pythonic" means to you, but here's another way:

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

Comments

1

There isn't anything more Pythonic in the standard library. I suggest you just do something simple such as:

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

You could always try to look for a little parser, but that would be overkill.

Comments

1

From here I have imported the following function, which use 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()

Then you need only this code:

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

Comments

0

You can do it like this.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.