遺伝子情報のスプレッドシートを作成するこのcsv ファイルをダウンロードしました。重要なのは、HLA-*
列に遺伝子情報があることです。遺伝子の分解能が低すぎる場合、たとえばDQB1*03
行を削除する必要があります。たとえば、データの解像度が高すぎる場合は、末尾DQB1*03:02:01
の:01
タグを削除する必要があります。DQB1*03:02
したがって、理想的には、タンパク質を の形式にして、 の後に 2 つのレベルの解像度を持たせたいと考えていますDQB1*
。これらの形式を探して、それらに保存されているデータを無視するようにPythonに指示するにはどうすればよいですか。例えば
if (csvCell is of format DQB1*03:02:01):
delete the :01 # but do this in a general format
elif (csvCell is of format DQB1*03):
delete row
else:
goto next line
更新:私が参照した編集済みコード
import csv
import re
import sys
csvdictreader = csv.DictReader(open('mhc.csv','r+b'), delimiter=',')
csvdictwriter = csv.DictWriter(file('mhc_fixed.csv','r+b'), fieldnames=csvdictreader.fieldnames, delimiter=',')
csvdictwriter.writeheader()
targets = [name for name in csvdictreader.fieldnames if name.startswith('HLA-D')]
for rowfields in csvdictreader:
keep = True
for field in targets:
value = rowfields[field]
if re.match(r'^\w+\*\d\d$', value):
keep = False
break # quit processing target fields
elif re.match(r'^(\w+)\*(\d+):(\d+):(\d+):(\d+)$', value):
rowfields[field] = re.sub(r'^(\w+)\*(\d+):(\d+):(\d+):(\d+)$',r'\1*\2:\3', value)
else: # reduce gene resolution if too high
# by only keeping first two alles if three are present
rowfields[field] = re.sub(r'^(\w+)\*(\d+):(\d+):(\d+)$',r'\1*\2:\3', value)
if keep:
csvdictwriter.writerow(rowfields)