Python 基于分号的独立列表元素

Python 基于分号的独立列表元素,python,list,parsing,Python,List,Parsing,我有一个列表,它是以 ['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', '

我有一个列表,它是以

 ['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()]
输出:

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')]

我喜欢用一个函数来进行解析。然后,您可以将该函数与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')]
就我个人而言,我喜欢这种类型的解析的可读性。嵌套列表理解或更高级的技术是完全可以接受的,但简单易懂的代码在我的书中具有极高的价值

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')]
[('48998', '18:45:44', 'R', 'qp32'), ... , ('49054', '0', 'Q', 'batch')]