2009-04-15 6 views
4

J'ai un fichier avec des données. Le fichier est la sortie générée à partir d'un fichier de script shell:Sortie du fichier shell d'analyse avec Python

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

Comment puis-je obtenir un = 869 de tout cela?

+0

Meilleur titre: comment lire (ou analyser) un fichier de données en colonnes dans Python? – sastanin

+0

est ce devoir? – hasen

Répondre

3

Vous pouvez également utiliser le module csv avec le délimiteur |.

9

Vous pouvez le faire:

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 

Ou, en utilisant le module csv, comme suggéré par Eugene Morozov:

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 
+0

Je pense qu'il est préférable de construire un dictionnaire à partir de la liste des paires. De cette façon, il est juste une ligne et est faisable avec des compréhensions de liste. Voir http://stackoverflow.com/questions/751557/parse-shell-file-output-with-python/751613#751613 – sastanin

+0

Personnellement, je ne suis pas un grand fan de golf à tous les problèmes. Peut-être que c'est parce que je suis nouveau avec Python mais les compréhensions de listes ne me crient pas "beauté" comme elles le font apparemment pour tout le monde. –

+0

Bien sûr, c'est une question de goût. Je le trouve plus clair et local (je ne dois pas m'inquiéter si dict est vide ou pas). – sastanin

4
lines = file("test.txt").readlines() 
d = dict([[i.strip() for i in l.split("|")[1:3]] for l in lines if l.strip()]) 

Par exemple:

>>> 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' 
0

Peut-être pas la façon la plus pythonienne, mais Cela devrait fonctionner si votre sortie shell est stockée dans f.txt et que vous recherchez chaque ligne à traiter:

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() 
Questions connexes