Print one word from a string in python

29,696

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 call f(r) returns r[2].

After, g = itemgetter(2,5,3), the call g(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

Share:
29,696
Shai
Author by

Shai

Updated on August 19, 2020

Comments

  • Shai
    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
      Ishbir almost 14 years
      It 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
      ThiefMaster over 13 years
      Please start answering questions. That's like saying "thanks".
  • joaquin
    joaquin almost 14 years
    @Ignacio: Thanks I didn't know that. It's great!