Eu corri para a seguinte tarefa para dividir um arquivo com base em várias ocorrências de um delimitador.
Eu tenho um arquivo que tem os seguintes dados:
Number of Employees - 95
==============================================================================
Telephone Number - 972123111111
Empl Name - David
Designation - Software Engineer
Address: **********
Doamin: Python
==============================================================================
Telephone Number - 972123111112
Empl Name - Glen
Designation - Software Engineer
Doamin: Python
==============================================================================
Telephone Number - 972123111111
Empl Name - Jhon
Designation - Software Engineer
Address: **********
Doamin: Python
==============================================================================
Neste arquivo, quero dividir as informações de cada funcionário entre "=" e, em seguida, imprimir o conteúdo de todos os funcionários, como abaixo:
Details of Employee: (Employee Name)
Telephone Number: (employee telephone number)
Designation : (employee desgination)
Eu escrevi o código para buscar dados de um arquivo em uma variável e usar abaixo da expressão regular para obter os dados, mas sem sucesso:
re.findall("[^=]=*.*?[=*$]", a)
Respostas:
0 para resposta № 1Tente este snippet, ele armazena todos os dados de funcionários como dicionários em uma lista completa
import re
data_separator_regepx = "-|:" #theres - and : as separators in sample text
employee_separator_regexp ="^=+$"
employees = []
with open("test.txt") as f_in:
curr_employee = {}
for idx,line in enumerate(f_in):
if not idx : continue #skip first line
line = line.strip()
if not line: continue #skip empty lines
if re.match(employee_separator_regexp,line):
if curr_employee:
employees.append(curr_employee)
curr_employee = {}
else:
line = re.split(data_separator_regepx,line)
key, value = line[0],line[1]
curr_employee[key.strip()]=value.strip()
for employee in employees:
print "Details of Employee: ({})".format(employee.get("Empl Name",""))
print "Telephone Number: ({})".format(employee.get("Telephone Number",""))
print "Designation: ({})".format(employee.get("Designation",""))
2 para resposta № 2
Usar re.split()
ao invés de re.findall()
igual a:
re.findall(r"^=+$", a)