2017-04-24 3 views
0

test1.properties hat Eintrag Key1 = 200 und test2.properties hat Eintrag key2 = 500Parsen Eigenschaftsdatei in Python

files = ['test1.properties', test2.properties'] 

for file in files: 
    with open(file) as stream: 
    stream = StringIO("[top]\n" + stream.read()) 
    parser.readfp(stream) 
    print parser.items('top') 

[('Key1', '200'), ('key2', ‚500 ')]

Möchten Sie ein weiteres Element in der vorhandenen Liste von Tupeln basierend auf der Datei während der Iteration hinzufügen. Das Element file1 sollte nur den Tupel test1.properties hinzugefügt werden, und das Element file2 sollte nur den Tupel test2.properties hinzugefügt werden.

[('Key1', '200', 'file1'), ('key2', '500', 'file2')]

Antwort

0

Hier ist eine Lösung.

import re 
files = ['test1.properties', 'test2.properties'] 
values = [] 
for file in files: 
    with open(file) as file_obj: 
    stream = StringIO("[top]\n" + file_obj.read()) 
    parser.readfp(stream) 
    n = re.search('(\d+)', file_obj.name).group(1) 
    values.append(parser.items('top') + ('file%s' % n,)) 

print(values) 
+0

aus StringIO import StringIO n = re.search ('(\ d +)', stream.name) .Group (1) Attribute: StringIO Instanz kein Attribut 'Name' hat Es ist Python 2.x – spiderman

+0

@spiderman Sie überschreiben den 'stream' Dateizeiger mit einer' StringIO' Instanz. Ändern Sie einen beliebigen Namen und verwenden Sie 'file_pointer.name'. Ich habe Code aktualisiert, um das zu beheben –