Print one word from a string in python
Solution 1
mystring = "You have 15 new messages and the size is 32000"
parts = mystring.split(' ')
message_count = int(parts[2])
message_size = int(parts[9])
Solution 2
It looks like you are matching something from program output or a log file.
In this case you want to match enough so you have confidence you are matching the right thing, but not so much that if the output changes a little bit your program goes wrong.
Regular expressions work well in this case, eg
>>> import re
>>> mystring = "You have 15 new messages and the size is 32000"
>>> match = re.search(r"(\d+).*?messages.*?size.*?(\d+)", mystring)
>>> if not match: print "log line didn't match"
...
>>> messages, size = map(int, match.groups())
>>> messages
15
>>> size
32000
Solution 3
mystring = "You have 15 new messages and the size is 32000"
print mystring.split(" ")[2] #Prints the 3rd word
print mystring.split(" ")[9] #Prints the 10th word
Solution 4
This function does the trick:
def giveme(s, words=()):
lista = s.split()
return [lista[item-1] for item in words]
mystring = "You have 15 new messages and the size is 32000"
position = (3, 10)
print giveme(mystring, position)
it prints -> ['15', '32000']
The alternative indicated by Ignacio is very clean:
import operator
mystring = "You have 15 new messages and the size is 32000"
position = (2, 9)
lista = mystring.split()
f = operator.itemgetter(*position)
print f(lista)
it prints -> ['15', '32000']
operator.itemgetter()
...
Return a callable object that fetches the given item(s) from its operand.
After,
f = itemgetter(2)
, the callf(r)
returns r[2].After,
g = itemgetter(2,5,3)
, the callg(r)
returns (r[2], r[5], r[3])
Note that now positions in position should be counted from 0 to allow using directly the *position argument
Shai
Updated on August 19, 2020Comments
-
Shai over 3 years
How can i print only certain words from a string in python ? lets say i want to print only the 3rd word (which is a number) and the 10th one
while the text length may be different each time
mystring = "You have 15 new messages and the size is 32000"
thanks.
-
Ishbir almost 14 yearsIt seems that an answer below worked for you. Please click the checkbox below the number of votes of that answer; this way your question is marked as “answered”.
-
ThiefMaster over 13 yearsPlease start answering questions. That's like saying "thanks".
-
-
joaquin almost 14 years@Ignacio: Thanks I didn't know that. It's great!