2016-03-22 10 views
0

J'ai besoin d'extraire des données à partir des lignes d'un fichier texte. Les données sont le nom et les informations formatées scoring comme celui-ci:extrait des données du fichier avec python

Feature_Locations: 
    - { x:9.0745818614959717e-01, y:2.8846755623817444e-01, 
     z:3.5268107056617737e-01 } 
    - { x:1.1413983106613159e+00, y:2.7305576205253601e-01, 
     z:4.4357028603553772e-01 } 
    - { x:1.7582545280456543e+00, y:2.2776308655738831e-01, 
     z:6.6982054710388184e-01 } 
    - { x:9.6545284986495972e-01, y:2.8368893265724182e-01, 
     z:3.6416915059089661e-01 } 
    - { x:1.2183872461318970e+00, y:2.7094465494155884e-01, 
     z:4.5954680442810059e-01 } 

Ce fichier est généré par un autre logiciel. Fondamentalement, je veux obtenir que les données de retour dans ce programme et je veux les enregistrer dans différents autres fichiers pour des exemples « axeX.txt » « axeY.txt » « axeZ.txt »

J'essayer

import numpy as np 
import matplotlib.pyplot as plt 
import re 
file = open('data.txt', "r") 
for r in file: 
    y = re.sub("- {", "",r).split() 
    tt = y[:2] 
    zz = tt 
    st = re.findall('\d+', r) 
    print st 
file.close() 

Y at-il un meilleur moyen ou je le fais mal?

Répondre

0

Vous pouvez essayer quelque chose comme:

s = open('data.txt', "r").read() 

x = re.findall(r'x:(.*), ', s) 
y = re.findall(r'y:(.*),', s) 
z = re.findall(r'z:(.*) ', s) 

with open('axeX.txt', 'w') as f: f.write('\n'.join(x)) 
with open('axeY.txt', 'w') as f: f.write('\n'.join(y)) 
with open('axeZ.txt', 'w') as f: f.write('\n'.join(z)) 
+0

Fonctionne très bien! Merci beaucoup ! : D – ahmed

1

Le fichier d'entrée est au format YAML. Il est recommandé d'utiliser le package PyYAML pour analyser les fichiers yaml.

import yaml 

document = """ 
Feature_Locations: 
    - { x: 9.0745818614959717e-01, y: 2.8846755623817444e-01, 
     z: 3.5268107056617737e-01 } 
    - { x: 1.1413983106613159e+00, y: 2.7305576205253601e-01, 
     z: 4.4357028603553772e-01 } 
    - { x: 1.7582545280456543e+00, y: 2.2776308655738831e-01, 
     z: 6.6982054710388184e-01 } 
    - { x: 9.6545284986495972e-01, y: 2.8368893265724182e-01, 
     z: 3.6416915059089661e-01 } 
    - { x: 1.2183872461318970e+00, y: 2.7094465494155884e-01, 
     z: 4.5954680442810059e-01 } 
""" 

locations = yaml.load(document)['Feature_Locations'] 

for ch in 'XYZ': 
    fname = 'axe%s.txt' %ch 
    with open(fname, 'w') as fh: 
     for item in locations: 
      fh.write('%s\n' % item[ch.lower()]) 

Le fichier d'entrée est légèrement endommagé. yamllint fera une vérification de santé mentale et nous informer des erreurs.

yamllint inputfile.yaml 
inputfile.yaml 
    1:1  warning missing document start "---" (document-start) 
    2:9  error syntax error: found unexpected ':' 

Dans ce cas, nous pouvons facilement corriger le fichier d'entrée.

sed -i 's/:/: /g' inputfile.yaml 
+0

Il semble que vous deviez pré-traiter le document en ajoutant des espaces entre les variables (x, y, z) et les valeurs réelles. Existe-t-il un moyen simple de faire cela en utilisant PyYAML? –