2017-01-25 4 views
0

В какой-нибудь каталог (/ патч/в) У меня есть файлы с именем:Python читать файлы и анализировать строки

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

... и так далее

Каждый файл имеет в основном такую ​​же структуру, в ней, но с различные значения, пример: `

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

Я хочу прочитать каждый файл из директории и принимать некоторые значения, чтобы использовать их позже. То, что я прямо сейчас:

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

Я хочу, чтобы распечатать (магазин) линии:

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

, а затем фактические значения:

AUT 
STEVEN 
EENS 
060294223 
S0000001 
+2

И что вы еще пробовали? – Lagerbaer

+0

Для каждого файла есть петля, чтобы переходить по строкам и сразу же считывать их все. Затем возьмите команду «split», чтобы разделить каждую строку на «=» и поместить результаты в список. Затем после этого у вас есть все данные в списке. Если вы не знаете, как это сделать, я бы рекомендовал пройти учебник Python. – RobertB

ответ

0

Если предположить, что ваш код считывания файлы работают, вы можете разбирать строки следующим образом:

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: Обновленный метод чтения файла

+0

Это кажется работающим, thx! Но только если я использую read: 'lines = f.read() keyValues ​​= re.findall ('^ (\\ w +) = (. +) $', Lines, re.MULTILINE)' – Mihkel

+0

Вы правы ! 'readlines()' возвращает список строк, в то время как 'read()' возвращает весь файл как одну строку. – Chaoste

0

Можно напечатать строки, содержащие «=», как вы идете и накапливают значения для печати в конце.

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) 
Смежные вопросы