2017-01-25 1 views
0

In einem Verzeichnis (/ Patch/in) Ich habe Dateien mit dem Namen:Python-Dateien lesen und analysieren Linien

S0000001.ARQ 
S0000001.SRQ 
S0000002.ARQ 
S0000002.SRQ 

... und so weiter

Jede Datei in es im Grunde gleiche Struktur hat, aber mit verschiedene Werte, Beispiel: `

----- BEGIN REQUEST ----- 
RQID=S0000001.ACE 
POLICY=AUT 
G=STEVEN 
SN=JEENS 
SERIALNUMBER=060294223 
DOCUMENT=S0000001 
----- END REQUEST ----- 

ich mag jede Datei von dir lesen und einige Werten übernehmen, um sie später zu verwenden. Was ich jetzt haben:

path = 'patch/in/*.ARQ' 
files=glob.glob(path) 
for file in files: 
    f=open(file, 'r') 
    print '%s' % f.readlines() 

I (Speicher) Zeilen drucken möchten:

POLICY=AUT 
G=STEVEN 
SN=JEENS 
SERIALNUMBER=060294223 
DOCUMENT=S0000001 

und dann die Ist-Werte:

AUT 
STEVEN 
EENS 
060294223 
S0000001 
+2

Und was hast du noch probiert? – Lagerbaer

+0

Für jede Datei, eine Schleife, um über die Linien vs alle gleichzeitig zu lesen. Dann nehmen Sie eine bei der "Split" -Befehl, um jede Zeile auf dem "=" zu teilen und die Ergebnisse in einer Liste. Danach haben Sie alle Daten in einer Liste. Wenn Sie nicht sicher sind, wie Sie das tun, würde ich Ihnen empfehlen, ein Python-Tutorial zu absolvieren. – RobertB

Antwort

0

Unter der Annahme, dass Ihr Code Auslesen die Dateien arbeitet, können Sie die Zeilen wie folgt analysieren kann:

import re 

... 
... 

lines = f.read() 
keyValues = re.findall('^(\\w+)=(.+)$', lines, re.MULTILINE) 

print('Lines containing key and value:') 
for key, value in keyValues: 
    print('{}={}'.format(key, value)) 

print('Actual values:') 
for key, value in keyValues: 
    print(value) 

Edit: Aktualisiert lesen Datei Methode

+0

Das scheint zu funktionieren, thx! Aber nur, wenn ich lesen: 'lines = f.read() KeyValues ​​= re.findall ('^ (\\ w +) = (+) $', Linien, re.MULTILINE)' – Mihkel

+0

Du hast Recht ! 'readlines()' gibt eine Liste von Strings zurück, während 'read()' die ganze Datei als eine Zeichenkette zurückgibt. – Chaoste

0

Sie Zeilen drucken konnten ‚=‘, wie Sie gehen und reichern sich die Werte enthält, am Ende zu drucken.

path = 'patch/in/*.ARQ' 
files=glob.glob(path) 
for filename in files: 
    values = [] 
    with open(filename) as f: 
     for line in f: 
      if '=' in line: 
       print line, 
       key, value = line.strip().split('=') 
       values.append(value) 
    print '\n'.join(values) 
Verwandte Themen