Python:从文件名中提取唯一ID

时间:2015-10-21 19:01:18

标签: python parsing text

我有一个csv文件,其中包含MLA格式的作者列表。

df = pd.read_csv('file.csv')

如果我检查我的列名:

df['name']

'van der Hilst, Rob, Chen, Min, Huang, Hui, Niu, Fenglin, Yao, Huajian'
'Malanotte-Rizzoli, Paola, Eltahir, Elfatih, Wei, Jun, Xue, Pengfei'
'Bowring, Samuel, Hoke, Gregory, Schmitz, Mark'

我想提取Firstname+Familyname并为其分配唯一ID。例如,我想要Rob van der Hilst = 0Min Chen = 1等等。

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题是正确的,那么你可以利用python字符串sclicing和其他花哨的语言功能

这是代码和解释:

加载名称

names = 'van der Hilst, Rob, Chen, Min, Huang, Hui, Niu, Fenglin, Yao, Huajian' + \
        'Malanotte-Rizzoli, Paola, Eltahir, Elfatih, Wei, Jun, Xue, Pengfei' + \
        'Bowring, Samuel, Hoke, Gregory, Schmitz, Mark'

在逗号上分隔名称,后跟空格:

names = names.split(', ')

使用python切片提取名字和姓氏,名称如下: [' van der Hilst',' Rob',' Chen'' Min',' Huang' ...]

切片采用标量[start:stop:steps]的形式,因此我们从第一个名字和第一个名字开始,并采取大小为2的步骤来获取所有其他姓氏或名字,如果&#39 ;停止'是空的,这意味着继续直到结束'

last_names = names[::2]
first_names = names[1::2]

最后我们使用字典完整性将名称映射到id,为此我们使用:

zip函数将姓氏和姓氏粘在一起

用于分配数字的枚举函数

'%s%s'合并名字和姓氏

names = {'%s %s' % (fn, ln) : _id for _id, (fn, ln) in enumerate(zip(first_names, last_names))}

最终代码是:

names = 'van der Hilst, Rob, Chen, Min, Huang, Hui, Niu, Fenglin, Yao, Huajian' + \
        'Malanotte-Rizzoli, Paola, Eltahir, Elfatih, Wei, Jun, Xue, Pengfei' + \
        'Bowring, Samuel, Hoke, Gregory, Schmitz, Mark'
names = names.split(', ')
last_names = names[::2]
first_names = names[1::2]

names = {'%s %s' % (fn, ln) : _id for _id, (fn, ln) in enumerate(zip(first_names, last_names))}