将常规字符串解析为元组

时间:2015-12-05 02:45:05

标签: python string tuples

如何以特定顺序将这些详细信息存储在元组中 要存储的字符串:

3445 3332r IT Ron Mose Don Simpson    
3446 2334f Teacher Hezen Mike Rob    
3447 2344g Writer Mike Robert

每行应存储在一个元组中,该元组应仅包含5个项:ID, reference, job, otherNames, Surname

例如,姓氏是姓氏,例如在第一行3445ID3332rreferenceIT是{{ 1}},jobRon Mose Donother namesSimpson

所以第一行应该像 3445,3332r,IT,Ron Mose Don,Simpson

或第2行应存储为 3446,2334f,教师,Hezen Mike,Rob

或最后一行应该是 3447,2344g,作家,迈克,罗伯特

的元组

3 个答案:

答案 0 :(得分:2)

拆分每个字符串,然后将其解压缩到您想要的结构中。将otherNames重新加入单个字符串。

l = ['3445 3332r IT Ron Mose Don Simpson',
     '3446 2334f Teacher Hezen Mike Rob',
     '3447 2344g Writer Mike Robert']
result = [(a, b, c, ' '.join(d), e) for a, b, c, *d, e in (item.split() for item in l)]

结果:

>>> print(*result, sep='\n')
('3445', '3332r', 'IT', 'Ron Mose Don', 'Simpson')
('3446', '2334f', 'Teacher', 'Hezen Mike', 'Rob')
('3447', '2344g', 'Writer', 'Mike', 'Robert')

答案 1 :(得分:1)

这是你想要的吗?

7

演示:

-7

答案 2 :(得分:0)

在工作中,我仍在运行2.7.x,所以我的解决方案适用于此。我的策略是拆分前3个令牌(id,ref,job)。对于剩余的令牌,最后一个是姓氏,其余的是另一个名称。

def tokenize(line):
    id_, ref, job, name = line.split(' ', 3)
    name, surname = name.rsplit(' ', 1)
    return id_, ref, job, name, surname

lines = """3445 3332r IT Ron Mose Don Simpson
3446 2334f Teacher Hezen Mike Rob
3447 2344g Writer Mike Robert"""

for line in lines.splitlines():
    print(tokenize(line))

输出:

('3445', '3332r', 'IT', 'Ron Mose Don', 'Simpson')
('3446', '2334f', 'Teacher', 'Hezen Mike', 'Rob')
('3447', '2344g', 'Writer', 'Mike', 'Robert')