之前已經(jīng)分享完python的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)了,我認(rèn)為掌握了這兩方面內(nèi)容其實已經(jīng)具備使用python進(jìn)行數(shù)據(jù)分析的能力了,但實際情況是你經(jīng)常會發(fā)現(xiàn)你看了很多python的基礎(chǔ)內(nèi)容,而當(dāng)你要使用時還是發(fā)現(xiàn)無從下手(哈哈,因為我一開始是這樣),那是因為你缺少實戰(zhàn)經(jīng)驗,實戰(zhàn)才是學(xué)習(xí)掌握python的最快辦法。所以要從零開始學(xué)習(xí)python,有目的的邊查邊寫能夠讓你迅速掌握python。在整理寫作過程中也發(fā)現(xiàn)了一個非常好的python學(xué)習(xí)資源,介紹的非常詳細(xì),鏈接如下:
Python - 100天從新手到大師
https://github.com/jackfrued/Python-100-Days
這個鏈接的內(nèi)容較多,但沒有太大的目的性,我今天的主要目的就是利用python進(jìn)行數(shù)據(jù)篩選。情況是這樣的,我目前有20個.txt文件(假設(shè)名為1.txt - 20.txt),各個文件內(nèi)容如下:
我想篩選每個文件中p小于0.05,foldchange絕對值大于2的所有行,并分別輸出(要是熟悉RNA-seq其實就是差異基因的篩選)
代碼如下:
#!/usr/bin/env python3
excel_name = []
for i in range(1,4):
excel_name.append(str(i) + '.' + 'txt')
print(excel_name)
for j in excel_name:
fl = str(j[:-3]) + 'DEG.txt'
DEG = open(fl, 'w')
DEG.write('gene' + '\t' + 'sample_1' + '\t' + 'sample_2' + '\t' + 'value1' + '\t' + 'value2' + '\t' + 'foldchange' + '\t' + 'p' + '\t' + 'q' + '\n')
with open (j) as a:
next(a)
for i in a:
ii = i.strip().split('\t')
if float(ii[6]) < float(0.05) and abs(float(ii[5])) >= int(1):
DEG.write(str(ii[0]) + '\t' + str(ii[1]) + '\t' + str(ii[2]) + '\t' + str(ii[3]) + '\t' + str(ii[4]) + '\t' + str(ii[5]) + '\t' + str(ii[6]) + '\t' + str(ii[7]) + '\n')
print('done')
該腳本能幫你掌握的內(nèi)容:
for-in 循環(huán)的使用 for j in excel_name:
range(),append(),write(),next(),strip(),split() 的使用
索引的使用 ii[6]
切片的使用 j[:-3]
文件的讀取 with open (j) as a:與輸出 DEG = open(fl, 'w')
if語句進(jìn)行判斷
運(yùn)算符的使用
正則表達(dá)式 \t ,\n
若無經(jīng)驗,使用方法可參考 Python - 100天從新手到大師
此外注意:在python中有兩個模塊(pandas,numpy)可用于處理excel文件,處理文件更高效,該腳本主要是為了處理txt文件,無需調(diào)用模塊