2018 Hakyung July Lab note
From Crop Genomics Lab.
HT-seq, edgeR 처리 후 한 파일에 리스트 형태로 저장
file = open ("/data2/haggui/RNA/edgeR/raw_edgeR/control.counts.edgeR","r") lines = file.readlines() list = [] for line in lines : gene_name = line.split('"')[1] #"gene name" 으로 되어 있는 것 가져오기 dic = [0,0,0,0,0] dic[0] = (gene_name) #dic = [genename,0,0,0,0] Cfile = open("/data2/haggui/RNA/edgeR/DEG_edgeR/DEG_control.txt","r") #control 상태에서의 DEG 정보 Clines = Cfile.readlines() for Cline in Clines : Cgene_name = Cline.split('"')[1] ClogFC = float(Cline.split(' ')[1]) #logFC value if Cgene_name == gene_name : if ClogFC < -1 : dic[1] = dic[1]+1 # SS2-2 > TG 이면 1 elif ClogFC > 1 : dic[1] = dic[1]+2 # TG < SS2-2 이면 2, dic = [genename,2,0,0,0] else : pass else : pass Cfile.close() Sfile = open("/data2/haggui/RNA/edgeR/DEG_edgeR/DEG_SS2-2.txt","r") #SS2-2가 drought 때 어떻게 변하는지 Slines = Sfile.readlines() for Sline in Slines : Sgene_name = Sline.split('"')[1] SlogFC = float(Sline.split(' ')[1]) if Sgene_name == gene_name : if SlogFC > 1 : dic[2] = dic[2]+1 #up-regulation이면 1 elif SlogFC < -1 : dic[2] = dic[2]+2 #down-regulation이면 2, dic = [genename,2,2,0,0] else : pass else : pass Sfile.close() Tfile = open("/data2/haggui/RNA/edgeR/DEG_edgeR/DEG_TG.txt","r") #태광의 변화 Tlines = Tfile.readlines() for Tline in Tlines : Tgene_name = Tline.split('"')[1] TlogFC = float(Tline.split(' ')[1]) if Tgene_name == gene_name : if TlogFC > 1 : #up-regulation이면 1 dic[3] = dic[3]+1 elif TlogFC < -1 : #down-regulation이면 2, dic = [genename,2,2,2,0] dic[3] = dic[3]+2 else : pass else : pass Tfile.close() Dfile = open("/data2/haggui/RNA/edgeR/DEG_edgeR/DEG_drought.txt","r") #drought상태에서의 expression level Dlines = Dfile.readlines() for Dline in Dlines : Dgene_name = Dline.split('"')[1] DlogFC = float(Dline.split(' ')[1]) if Dgene_name == gene_name : if DlogFC < -1 : #SS2-2 > TG 이면 1 dic[4] = dic[4]+1 elif DlogFC > 1: #TG > SS2-2 이면 2, dic = [genename,2,2,2,2] dic[4] = dic[4]+2 else : pass else : pass Dfile.close() list.append(dic) #list =[[genename,0,0,1,0],[genename2,0,1,1,0] ...] f = open('exp_list.txt','w') import pickle # 어떤 형태로든 저장해줌, 원래는 새 파일에 쓰면 무조건 string 형태, (리스트 모양의 스트링), 하지만 피클을 사용하면 리스트를 리스트로 저장할 수 있다. pickle.dump(list,f) #리스트를 f변수로 저장된 파일에 써라 f.close()
원하는 리스트 뽑기
file = open('exp_list.txt','r') import pickle #파일 사용할 때도 pickle 모듈 불러와줘야함 list = pickle.load(file) import sys # python에서 argument 사용할 때. (command 라인으로 input 바로 받아줌) a = int(sys.argv[1]) #첫번째 argument b = int(sys.argv[2]) c = int(sys.argv[3]) d = int(sys.argv[4]) for gene in list : #gene = [genename,0,1,0,1] if a == gene[1] or a == 9: #control 상에서 exp level 상태가 첫번째 argument와 같거나, 무시하라는 input을 받았을 때(9) if b == gene[2] or b == 9 : #SS2-2의 변화가 두번째 argument와 같거나, 무시하라는 input을 받았을 때 if c == gene[3] or c == 9: if d == gene[4] or d == 9: print (gene[0]) #genename을 print하라 elif c == 3 and (gene[3] == 1 or gene[3] == 2) : if d == gene[4] or d == 9: print (gene[0]) else : pass else : pass elif b == 3 and (gene[2] == 1 or gene[2] == 2) : if c == gene[3] or c == 9: if d == gene[4] or d == 9: print (gene[0]) elif c == 3 and ( gene[3] == 1 or gene[3] == 2) : if d == gene[4] or d == 9: print (gene[0]) else : pass else : pass else : pass else : pass
리스트 비교하기(차집합,교집합)
import sys file1 = open(sys.argv[1]).readlines() #첫번째 argument는 비교하고자 하는 input file1 file2 = open(sys.argv[2]).readlines() #두번째 argument는 비교하고자 하는 input file2 s1 = set(file1) #리스트를 집합으로 만들라 s2 = set(file2) file3 = list(s1&s2) #교집합 file3.sort() file4 = list(s1-s2) #차집합 file4.sort() file5 = list(s2-s1) file5.sort() #집합으로 교집합, 차집합 등을 사용할 경우 순서가 없기 때문에 엉망이 됨. 다시 sort 해주기 if sys.argv[3] == '1' : #세번째 argument option이 1일 경우 교집합 print for line in file3: print line, elif sys.argv[3] == '2' : for line in file4: print line, elif sys.argv[3] == '3' : for line in file5 : print line,
- 혼자 할 때는 cat > | cat >> | uniq 등을 써서 command 라인에서 바로 수행해도 됨.