我有一个以
形式从文件中读取的列表 ['48998.tyrone-cluster;gic1_nwgs;mbupi;18:45:44;R;qp32\n', '48999.tyrone-cluster;gic2_nwgs;mbupi;0;Q;batch\n', '49005.tyrone-cluster;...01R-1849-01_2;mcbkss;00:44:23;R;qp32\n', '49032.tyrone-cluster;gaussian_top.sh;chemraja;0;Q;qp32\n', '49047.tyrone-cluster;jet_egrid;asevelt;312:33:0;R;qp128\n', '49052.tyrone-cluster;case3sqTS1e-4;mecvamsi;0;Q;qp32\n', '49053.tyrone-cluster;...01R-1850-01_1;mcbkss;0;Q;batch\n', '49054.tyrone-cluster;...01R-1850-01_2;mcbkss;0;Q;batch\n']
在此列表中,我需要基于以下内容分离元素;并获取列表的输出
输出应该是: '48998','18:45:44','R','qp32'
'48999','0','Q','batch'
'49005','00:44:23','R','qp32' (and so on till the end of the list)
'49054','0','Q','batch'
应该写入文件。现在我尝试这样的代码,但无法获得所需的输出。
parsed_data = [content[0].split(".")[0], content[3], content[4], content[5].strip()]
答案 0 :(得分:1)
L = ['48998.tyrone-cluster;gic1_nwgs;mbupi;18:45:44;R;qp32\n', '48999.tyrone-cluster;gic2_nwgs;mbupi;0;Q;batch\n', '49005.tyrone-cluster;...01R-1849-01_2;mcbkss;00:44:23;R;qp32\n', '49032.tyrone-cluster;gaussian_top.sh;chemraja;0;Q;qp32\n', '49047.tyrone-cluster;jet_egrid;asevelt;312:33:0;R;qp128\n', '49052.tyrone-cluster;case3sqTS1e-4;mecvamsi;0;Q;qp32\n', '49053.tyrone-cluster;...01R-1850-01_1;mcbkss;0;Q;batch\n', '49054.tyrone-cluster;...01R-1850-01_2;mcbkss;0;Q;batch\n']
answer = [operator.itemgetter(0,3,4,5)(s.split(';')) for s in L]
answer = [(t[0].split('.')[0], t[1], t[2], t[3].strip()) for t in answer]
输出:
Out[13]:
[('48998', '18:45:44', 'R', 'qp32'),
('48999', '0', 'Q', 'batch'),
('49005', '00:44:23', 'R', 'qp32'),
('49032', '0', 'Q', 'qp32'),
('49047', '312:33:0', 'R', 'qp128'),
('49052', '0', 'Q', 'qp32'),
('49053', '0', 'Q', 'batch'),
('49054', '0', 'Q', 'batch')]
答案 1 :(得分:1)
我喜欢分解函数来进行解析。然后,您可以将该函数与map一起使用,或者在列表推导中使用。
inval = ['48998.tyrone-cluster;gic1_nwgs;mbupi;18:45:44;R;qp32\n', '48999.tyrone-cluster;gic2_nwgs;mbupi;0;Q;batch\n', '49005.tyrone-cluster;...01R-1849-01_2;mcbkss;00:44:23;R;qp32\n', '49032.tyrone-cluster;gaussian_top.sh;chemraja;0;Q;qp32\n', '49047.tyrone-cluster;jet_egrid;asevelt;312:33:0;R;qp128\n', '49052.tyrone-cluster;case3sqTS1e-4;mecvamsi;0;Q;qp32\n', '49053.tyrone-cluster;...01R-1850-01_1;mcbkss;0;Q;batch\n', '49054.tyrone-cluster;...01R-1850-01_2;mcbkss;0;Q;batch\n']
def parse(raw):
parts = raw.strip().split(';')
_id, _ = parts[0].split('.')
return _id, parts[3], parts[4], parts[5]
print map(parse, inval)
# or
# print [parse(val) for val in inval]
<强>输出强>
[('48998', '18:45:44', 'R', 'qp32'),
('48999', '0', 'Q', 'batch'),
('49005', '00:44:23', 'R', 'qp32'),
('49032', '0', 'Q', 'qp32'),
('49047', '312:33:0', 'R', 'qp128'),
('49052', '0', 'Q', 'qp32'),
('49053', '0', 'Q', 'batch'),
('49054', '0', 'Q', 'batch')]
我个人赞成在这种类型的解析中使用可读性。嵌套列表推导或更高级的技术是完全可以接受的,但简单,易于遵循的代码在我的书中具有极大的价值。
答案 2 :(得分:0)
list_of_lists = [item.split(';') for item in original_list]
list_of_tuples_final = [(li[0].split('.')[0], li[3], li[4], li[5].strip()) for li in list_of_lists]
输出是一个元组列表,类似于:
[('48998', '18:45:44', 'R', 'qp32'), ... , ('49054', '0', 'Q', 'batch')]