As @mhawke pointed out, my original solution using the csv
module missed the requirement is to split on both \t
and ;
.
import csv
import itertools
data = ['chr1\tmatch\t158337\t160567\t.t-t.tfam=LINE;Target=RIL 356 2619;ID=RIL-map20;Order=TE;Class=Unknown;Identity=93.9881;Name=chr1_RIL-Map20']
reader = csv.reader(data, delimiter='\t')
record = [i for i in itertools.chain(*[i for i in
(j for row in reader
for item in row
for j in csv.reader([item], delimiter=';'))])]
print(record)
# ['chr1', 'match', '158337', '160567', '.t-t.tfam=LINE', 'Target=RIL 356 2619', 'ID=RIL-map20', 'Order=TE', 'Class=Unknown', 'Identity=93.9881', 'Name=chr1_RIL-Map20']
I like using the csv
module, since it leverages all the functionality in that module.
Update
Now that I took a moment to think about it, I rewrote it to get rid of the need for the itertools
module:
import csv
data = ['chr1\tmatch\t158337\t160567\t.t-t.tfam=LINE;Target=RIL 356 2619;ID=RIL-map20;Order=TE;Class=Unknown;Identity=93.9881;Name=chr1_RIL-Map20']
reader = csv.reader(data, delimiter='\t')
record = [i for i in (k for row in reader
for item in row
for j in csv.reader([item], delimiter=';')
for k in j)]
print(record)
# ['chr1', 'match', '158337', '160567', '.t-t.tfam=LINE', 'Target=RIL 356 2619', 'ID=RIL-map20', 'Order=TE', 'Class=Unknown', 'Identity=93.9881', 'Name=chr1_RIL-Map20']