Как сопоставить префиксы телефонных номеров?
Я анализирую данные с телефонными номерами, которые мне нужно сопоставить со страной и оператором. Я получил сопоставления префиксов телефонных номеров страны и назначения (города / оператора) в следующей форме:
Country, Destination, Country Code, Destination Code, Remarks
AAA, Some Mobile, 111, "12, 23, 34, 46",Some remarks
AAA, Some city A, 111, "55, 56, 57, 51", Some more remarks
BBB, Some city B, 222, "234, 345, 456", Other remarks
Данные здесь являются фиктивными, но реальные данные имеют ту же форму. В столбце "Код пункта назначения" много значений. Поэтому я хочу преобразовать этот файл в форму, пригодную для использования внутри базы данных.
Я подумал о том, чтобы преобразовать его в форму, показанную ниже:
Country, Destination, Combined Code, Remarks
AAA, Some Mobile, 11112, Some remarks
AAA, Some Mobile, 11123, Some remarks
AAA, Some Mobile, 11134, Some remarks
AAA, Some Mobile, 11146, Some remarks
etc..
Это позволило бы мне создать более простую таблицу сопоставления. Как лучше всего справляться с такими данными? Как бы я написал код в сценарии оболочки Bash или Python для этого преобразования?
1 ответ
Решение
>>> data = [['Country', 'Destination', 'Country Code', 'Destination Code', 'Remarks'],
... ['AAA', 'Some Mobile', '111', '12, 23, 34, 46','Some remarks'],
... ['AAA', 'Some city A', '111', '55, 56, 57, 51', 'Some more remarks'],
... ['BBB', 'Some city B', '222', '234, 345, 456', 'Other remarks']]
>>>
>>> op=[data[0]]
>>> for i in data[1:]:
... for j in i.pop(3).split(','):
... op.append([k+j.strip() if i.index(k)==2 else k for k in i])
...
>>> for i in op:
... print i
...
['Country', 'Destination', 'Country Code', 'Destination Code', 'Remarks']
['AAA', 'Some Mobile', '11112', 'Some remarks']
['AAA', 'Some Mobile', '11123', 'Some remarks']
['AAA', 'Some Mobile', '11134', 'Some remarks']
['AAA', 'Some Mobile', '11146', 'Some remarks']
['AAA', 'Some city A', '11155', 'Some more remarks']
['AAA', 'Some city A', '11156', 'Some more remarks']
['AAA', 'Some city A', '11157', 'Some more remarks']
['AAA', 'Some city A', '11151', 'Some more remarks']
['BBB', 'Some city B', '222234', 'Other remarks']
['BBB', 'Some city B', '222345', 'Other remarks']
['BBB', 'Some city B', '222456', 'Other remarks']
Решение для вашей обновленной проблемы:
>>> data = [['Country', 'Destination', 'Country Code', 'Destination Code', 'Remarks'],
... ['AAA', 'Some Mobile', '111', '12, 23, 34, 46','Some remarks'],
... ['AAA', 'Some city A', '111', '55, 56, 57, 51', 'Some more remarks'],
... ['BBB', 'Some city B', '222', '234, 345, 456', 'Other remarks']]
>>>
>>> op=[data[0]]
>>> for i in data[1:]:
... for id,j in enumerate(i.pop(3).split(',')):
... k=i[:]
... k.insert(3,i[2]+j.strip())
... op.append(k)
...
>>> for i in op:
... print i
...
['Country', 'Destination', 'Country Code', 'Destination Code', 'Remarks']
['AAA', 'Some Mobile', '111', '11112', 'Some remarks']
['AAA', 'Some Mobile', '111', '11123', 'Some remarks']
['AAA', 'Some Mobile', '111', '11134', 'Some remarks']
['AAA', 'Some Mobile', '111', '11146', 'Some remarks']
['AAA', 'Some city A', '111', '11155', 'Some more remarks']
['AAA', 'Some city A', '111', '11156', 'Some more remarks']
['AAA', 'Some city A', '111', '11157', 'Some more remarks']
['AAA', 'Some city A', '111', '11151', 'Some more remarks']
['BBB', 'Some city B', '222', '222234', 'Other remarks']
['BBB', 'Some city B', '222', '222345', 'Other remarks']
['BBB', 'Some city B', '222', '222456', 'Other remarks']