2014-11-04 6 views
0

Я пытаюсь получить строку текстового файла, который содержит определенную строку, и печать третьего номера или строки в строке. Текстовый файл выглядит следующим образом:Печать строки в текстовом файле, который содержит строку

1997 180 60 bob 

1997 145 59 dan 

Если входной текст содержит bob, мой код должен напечатать 60.

Вот что я до сих пор:

calWeight = [line for line in open('user_details.txt') if name in line] 
stringCalWeight = str(calWeight) 
print (stringCalWeight) 

Как я могу это исправить?

+1

вы хотите имя и номер или просто номер? –

+0

только номер – mickelodeon612

+0

@ mickelodeon612 Каков ваш ожидаемый результат для этого 'foo12bar12foobar60 bob'? –

ответ

1
with open('user_details.txt') as f: 
    for line in f: 
     if "bob" in line: 
      print(line.split()[2]) 

Если вы хотите список всех Nums где ЛПП в строке использовать список понимание:

with open('user_details.txt') as f: 
    nums = [line.split()[2] for line in f if "bob" in line] 

Вы также можете разделить, прежде чем проверить, если вы хотите, чтобы избежать случаев, когда в название подстрока строки в строке, например bob in bobbing -> True:

nums = [line.split()[2] for line in f if "bob" in line.split()] 

Я думаю, что более полезной структуры было бы Dict, где значения являются все третьи номера в линию Asso связанных с каждым именем:

from collections import defaultdict 
d = defaultdict(list) 
with open("in.txt") as f: 
    for line in f: 
     if line.strip(): 
      spl = line.rstrip().split() 
      d[spl[-1]].append(spl[2]) 
print(d) 
defaultdict(<type 'list'>, {'bob': ['60'], 'dan': ['59']}) 
+0

@AvinashRaj, почему вы думаете, что слова не разделены? –

0

Через re модуль.

>>> L = [] 
>>> for line in open('/home/avinash/Desktop/f'): 
     if 'bob' in line: 
      L.append(re.search(r'^(?:\D*\d+\b){2}\D*(\d+)', line).group(1)) 


>>> print(L) 
['60'] 
0
#need to open the file properly 
with open('info.txt', 'r') as fp: 
    #as suggested by @Padraic Cunningham it is better to iterate over the file object 
    for line in fp: 
     #each piece of information goes in a list 
     infos = line.split() 
     #this makes sure that there are no problems if your file has a empty line 
     #and finds bob in the information 
     if infos and infos[-1] == 'bob': 
      print (infos[2]) 
+0

Почему вы используете readlines, а не просто итерацию над файлом? –

+0

хорошо пункт! Я исправлю это – meto

 Смежные вопросы

  • Нет связанных вопросов^_^