Уважаемые коллеги, у меня есть формат необработанных данных, который подробно описан ниже, где в первую очередь он должен состоять из трех строк, и каждая строка начинается с шаблона dn:
, следующего за ftpuser
и description
, тогда как в некоторых ситуациях третья строка description
отсутствует, следовательно, в этом случае используются первые две строки. Теперь я использую многострочное регулярное выражение, чтобы сопоставить все эти шаблоны, и использую его для получения данных из моей переменной data
, и это передается регулярному выражению (re.findall). Далее, у меня есть для зацикливания matchObj
чтобы получить значения в форме индекса, поэтому я могу только нужные индексы из списка new_str
.
Ниже приведен файл данных:
dn: uid=ac002,ou=ftpusers,ou=applications,o=regg.com
ftpuser: Y
description: file transfer|12/31/2010|file transfer
dn: uid=ab02,ou=ftpusers,ou=applications,o=regg.com
ftpuser: disabled_5Mar07
description: Remedy Tkt 01239399 regg move
dn: uid=mela,ou=ftpusers,ou=applications,o=regg.com
ftpuser: Y
description: ROYALS|none|customer account
dn: uid=aa01,ou=ftpusers,ou=applications,o=regg.com
ftpuser: T
dn: uid=aa02,ou=ftpusers,ou=applications,o=regg.com
ftpuser: Y
dn: uid=aa03,ou=ftpusers,ou=applications,o=regg.com
ftpuser: Y
dn: uid=bb01,ou=ftpusers,ou=applications,o=regg.com
ftpuser: T
dn: uid=bb02,ou=ftpusers,ou=applications,o=regg.com
ftpuser: Y
dn: uid=bb03,ou=ftpusers,ou=applications,o=regg.com
ftpuser: Y
dn: uid=bb05,ou=ftpusers,ou=applications,o=regg.com
ftpuser: Y
dn: uid=ab01,ou=ftpusers,ou=applications,o=regg.com
ftpuser: Y
description:: VGVzdGluZyA=
dn: uid=tt@regg.com,ou=ftpusers,ou=applications,o=regg.com
ftpuser: T
description: REG-JP|7-31-05|REG-JP
Ниже приведен код, который я пробовал, но проблема здесь в том, что этот код выбирает только те данные, в которых он получает все три строки (dn:
, ftpuser
, description
), и строку, где у него есть только две строк ((dn:
, ftpuser
) он не может получить те, поэтому я хотел бы знать, как мы можем получить эти строки также в аналогичный вывод, делая / добавляя Description: null
везде, где его пропущено
#!/usr/bin/python3
# ./dataparse.py
from __future__ import print_function
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE,SIG_DFL)
import re
with open('test2', 'r') as f:
for line in f:
line = line.strip()
data = f.read()
regex = (r"dn:(.*?)\nftpuser: (.*)\ndescription:* (.*)")
matchObj = re.findall(regex, data)
for index in matchObj:
#print(index)
index_str = ' '.join(index)
new_str = re.sub(r'[=,]', ' ', index_str)
new_str = new_str.split()
print("{0:<30}{1:<20}{2:<50}".format(new_str[1],new_str[8],new_str[9]))
Результирующий вывод:
$ ./dataparse.py
ab02 disabled_5Mar07 Remedy
mela Y ROYALS|none|customer
ab01 Y VGVzdGluZyA
tt@regg.com T REG-JP|7-31-05|REG-JP
Как начинающий питон, буду признателен за любую помощь или предложение.