如何匹配电话号码前缀?

时间:2014-11-09 09:31:06

标签: python database shell fileparsing fileparse

我正在分析我需要与国家和运营商匹配的电话号码的数据。我已收到以下格式的电话号码前缀的国家和目的地(城市/运营商)映射:

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 shell脚本或python中编写代码进行此转换?

1 个答案:

答案 0 :(得分: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']