2015-03-05 3 views
0

У меня есть список, который считывается из файла в видеотдельные элементы списка на основе точкой с запятой

['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'   

, который должен быть записан в файл .Till Теперь я попытался коды, как это, но не могли бы получить желаемый результат.

parsed_data = [content[0].split(".")[0], content[3], content[4], content[5].strip()] 

ответ

1

Мне нравится идея вспыхивают функцию, чтобы сделать синтаксический анализ. Затем вы можете использовать эту функцию с картой или в понимании списка.

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

Лично я предпочитаю читаемость в этом типе анализа. Вложенные списки или более совершенные методы полностью приемлемы, но простой, простой в использовании код имеет исключительную ценность в моей книге.

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')] 
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')] 
Смежные вопросы