Я получаю файлы tsv от людей, которые обычно имеют один из двух форматов:
# format 1
sample 100 200 1
sample 200 300 2
sample 300 400 3
sample 400 500 X
или
# format 2
sample 100 200 chr1
sample 200 300 chr2
sample 300 400 chr3
sample 400 500 chrX
Иногда мне нужно, чтобы файл был в первом формате, ииногда мне нужно, чтобы он был во втором формате.Я знаю, в каком формате он должен быть до запуска моего кода Python, поэтому я получаю их CSV-файл, и если у меня есть файл в формате 1 и мне нужен его в формате 2, я запускаю следующий скрипт awk:
awk '{print $1, $2, $3, "chr"$4}' tester.csv
, который выводит формат 1, чтобы быть похожим на формат 2, и интерпретируется моим кодом Python как текстовый файл без проблем.Я могу сделать то же самое в обратном порядке, используя sed:
sed 's/chr//' testerchr.txt
, который выводит формат 2 как формат 1. Затем я запускаю свой код на python, который сравнивается следующим образом:
testchr = [(1, 'ACGTGCTAGCTG'), (2, 'ACGATGCTAGCT'), (3, 'GCTCGT')]
regions = pd.read_csv('./tester.csv', sep='\t', names=['Sample', 'pos1', 'pos2', 'Chr'])
for x,y in testchr: # [(1, ACGTGCTAGCTGA), (2, ACGATGCTAGCT), (3, GCTCGT)]
chrm = str(x)
for u,v,a,b in zip(regions.Sample, regions.pos1, regions.pos2, regions.Chr):
if str(b) == chrm:
#process data
Так что обычно у меня есть список кортежей
Если я предварительно обработаю данные (используя команду awk или sed до кода Python), у меня никогда не возникнет никаких проблем.Мне просто интересно, может ли кто-нибудь предложить способ, которым мне не нужно было предварительно обрабатывать данные.По сути, мой код Python может принимать данные в любом формате и функционировать должным образом , не внося никаких изменений во входные данные и не сообщая программе заранее, какой формат входного файла: .
Спасибо, Деннис