Разобрать вывод файла оболочки с помощью Python - PullRequest
4 голосов
/ 15 апреля 2009

У меня есть файл с данными. Файл представляет собой вывод, сгенерированный из файла сценариев оболочки:

|a                     |869         |
|b                     |835         |
|c                     |0           |
|d                     |0           |
|e                     |34          |
|f                     |3337     

Как я могу получить = 869 из этого?

Ответы [ 4 ]

9 голосов
/ 15 апреля 2009

Вы можете сделать это:

output = {}
for line in open("myfile"):
    parts = line.split('|')
    output[parts[1].strip()] = parts[2].strip()

print output['a'] // prints 869
print output['f'] // prints 3337

Или, используя модуль csv , как предложил Евгений Морозов:

import csv
output = {}
reader = csv.reader(open("C:/output.txt"), delimiter='|')
for line in reader:
    output[line[1].strip()] = line[2].strip()

print output['a'] // prints 869
print output['f'] // prints 3337
4 голосов
/ 15 апреля 2009
lines =  file("test.txt").readlines()
d = dict([[i.strip() for i in l.split("|")[1:3]] for l in lines if l.strip()])

Например:

>>> lines =  file("test.txt").readlines()
>>> d = dict([[i.strip() for i in l.split("|")[1:3]] for l in lines if l.strip()])
>>> d['a']
'869'
3 голосов
/ 15 апреля 2009

Вы также можете использовать csv модуль с разделителем |.

0 голосов
/ 15 апреля 2009

Возможно, не самый Pythonic способ, но это должно работать, если вывод вашей оболочки хранится в файле f.txt, и вы ищете каждую строку для обработки:

h = open("f.txt", "rt")
inp = h.readline()
while inp:
  flds = inp.split('|')
  str = flds[1].strip() + " = " + flds[2].strip()
  print str
  inp = h.readline()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...