1. 程式人生 > >Python實現讀取多個/批量txt檔案合併成一個txt(示例為tcga資料處理)

Python實現讀取多個/批量txt檔案合併成一個txt(示例為tcga資料處理)

本程式 功能:

將tcga資料的批量txt檔案合併成一個txt

原始的第一個txt(代表一個病人)的資料內容

 

合併之後的txt資料,基因名不變,只是把病人的表達量收集到一起

 

操作說明:

本人測試通過的執行環境:Python 2.7  Windows 7 64bit  cmd命令執行器

使用步驟:

        1.將要處理的資料txt檔案放入到11這個資料夾下面(預設的root = 'C:\\tcga\\datapro\\11'),或者將單引號' '中的路徑改成自己txt所在的資料夾的路徑(結尾沒有\\也行

 

        2.放入的txt檔案建議不要超過100個,因為個數越多,讀入時消耗電腦記憶體就越大,容易卡機,測試時

100個可以正常執行

        3.預設生成的txt路徑為F:/data1.txt,自己也可以修改這個路徑和檔名

 

        4.Windows鍵,在搜尋欄輸入 cmd 按回車鍵,cmd將被開啟

 

        4.tcga_txt.py檔案複製到安裝的Python所在的資料夾下,我的是C:\Python27(預設安裝就是這個路徑),能看到python.exe

 


        5.cmd中輸入cd C:\Python27(注意有空格)按回車會進入到該目錄,然後輸入python.exe tcga_txt.py  再按回車,就開始執行程式了,可以看到寫入到輸出檔案的基因行數


        4.處理完第一批

txt後,記得將生成的data1.txt改名或者的剪下到別的地方,防止第二批txt執行時生成的data1.txt將其覆蓋掉

原始碼:

  tcga_txt.py

# -*- coding:utf-8 -*-
"""
Author:Logen
Version=1.0
Email:[email protected]
測試的執行環境:Python 2.7  Windows 7 64bit 
使用說明:
        1.將要處理的資料txt檔案放入到11這個資料夾下面(預設的root = 'C:\\tcga\\datapro\\11'),或者將''中的路徑改成自己txt所在的資料夾的路徑也行
        2.放入的txt檔案建議不要超過100個,因為個數越多,讀入時消耗電腦記憶體就越大,容易卡機,測試時100個可以正常執行
        3.預設生成的txt路徑為F:/data1.txt,自己也可以修改這個路徑和檔名
        4.處理完第一批txt後,記得將生成的data1.txt改名或者的剪下到別的地方,防止第二批txt執行時生成的data1.txt將其覆蓋掉
"""
#當編寫的Python檔案即當前程式碼及註釋中含有中文或者非英文字元時,需要宣告編碼格式為utf-8
import os   #讀取txt檔案所需要的包
import linecache #讀取指定行函式linecache.getline(file_ob, line_num)所在的包

root = 'C:\\tcga\\datapro\\11'#讀取的批量txt所在的資料夾的路徑
file_names = os.listdir(root) #讀取11資料夾下所有的(520個)txt的檔名
file_ob_list = []   #定義一個列表,用來存放剛才讀取的520個txt檔名
for file_name in file_names:  #迴圈地給這520個檔名加上它前面的路徑,以得到它的具體路徑
    fileob = root + '\\' + file_name #資料夾路徑加上\\ 再加上具體要讀的的txt的檔名就定位到了這個txt
    file_ob_list.append(fileob) #將路徑追加到列表中儲存  ['C:\\tcga\\datapro\\11\\1.txt','C:\\tcga\\datapro\\11\\2.txt',。。。。]

print file_ob_list  #列印這個列表的內容到顯示屏,不想顯示的話可以去掉這句

ldata=[]
data = []
    #file_ob_list是所有檔案(比如10個txt)物件組成的列表,for用來迴圈讀取每一個檔案,讀取一個檔案的方式是一行行讀入,
    # 每次迴圈一次for就讀取所有檔案的某一行,因為這一行的第一列都是基因名稱,都是一樣的
line_num = 1  #從txt的第一行開始讀入
total_line = len(open(file_ob_list[0]).readlines()) #計算一個txt中有多少行
while line_num <= total_line:        #只有讀完的行數小於等於總行數時才再讀下一行,否則結束讀取
    for file_ob in file_ob_list:    #按順序迴圈讀取所有檔案
            line = linecache.getline(file_ob, line_num)#讀取這個檔案的第line_num行
            line = line.strip() #去掉這一行最後一個字元/n 即換行符
            if line is None or len(line) ==0 :
                break
            fields = line.split('\t')  #將這一行劃分為兩列,存放到列表中,fields是這樣的: ['ENSG00000242268.2','0.0']
            prob = fields[1]           # fields[0]是'ENSG00000242268.2'   fields[1]是'0.0'

            #這個if部分只是將表達量的10位小數點壓縮到4位,其實可以去掉這個處理
            if fields[1] != 'NA':      #基因表達量不是NA也就是為數字時,才對它進行小數點的減少處理
                prob = float(fields[1]) #將字元形式的數字如'0.0'強制轉化為浮點型(帶小數點的數字)數字0.0
                prob = '%.4f' % prob   #只保留小數點後面的4位小數

            if file_ob == file_ob_list[0] :  #如果讀的是第一個txt檔案,則將讀進去的第一列基因名和第二列表達量
                data = [fields[0], prob]     # 都加入到列表中  data=  ['ENSG00000242268.2','0.0']
            else :                          # 如果讀進去的不是第一個檔案,則跳到else執行,第一列不要,
                data.append(prob)           #只將第二列表達量追加到之前的二維陣列後面,假如這時讀的是第二個檔案的第一行
                                            # 此時fields為['ENSG00000242268.2','0.10'],則data=['ENSG00000242268.2','0.0','0.10']

    line_num = line_num + 1     #行數加1,好接著讀取每一個檔案的第二行
    ldata.append(data)        #將存放了所有txt的第一行資料的data,放到一個新的列表中儲存,這時ldata就是一個二維列表,ldata=[['ENSG00000242268.2','0.0','0.10'],[...],...]
                            #用來存放所有的(60482行,就是所有的基因名)行數
    data=[]                #清空data用來存放所有txt的下一行

f = open("F:/data1.txt", "w+")  #建立存放資料的檔案
for i,p in enumerate(ldata):    #將資料寫入檔案,i是enumerate()函式返回的ldata的某個元素p(就是一行資料,如['ENSG00000242268.2','0.0','0.10']從第一個開始)開始的序號(0,1,2等)
    for j,q in enumerate(p):   #讀取p(如['ENSG00000242268.2','0.0','0.10'])中的每一個元素
        f.write(q + "\t" )    #將這個元素寫到txt中,每寫一個加入一個“\t”(它代表excel中的一根豎線)
    print i                 #顯示一下列印到了第多少行
    f.write( "\n")         #每寫完一行,就寫入一個換行符"\n",好使的接下來的資料寫入到第二行

f.close()  #操作完一個檔案後應該將它關閉

相關推薦

Python實現讀取/批量txt檔案合併一個txt示例tcga資料處理

本程式 功能:將tcga資料的批量txt檔案合併成一個txt原始的第一個txt(代表一個病人)的資料內容 合併之後的txt資料,基因名不變,只是把病人的表達量收集到一起 操作說明:本人測試通過的執行環境:Python 2.7  Windows 7 64bit  cmd命令執行

Excel文件合併一個文件檔案

Sub Macro1() Dim MyPath$, MyName$, sh As Worksheet, sht As Worksheet, m& Set sh = ActiveSheet MyPath = ThisWorkbook.Path & "\" MyName = Dir(My

如何編譯靜態庫及將.a靜態庫合併一個.a靜態庫

所使用的命令為ar 1 將所有的.a庫解壓成.o檔案ar x xx.a 2 將所有的.o 檔案合併成.aar rcs xx.b *.o 3 編譯.a 靜態庫 1)生成對應的.o 檔案 gcc -c a.c b.c 2)使用ar命令合成靜態庫 ar crs libjson.a *.o 3) 檢視編譯庫

怎麼將Excel工作簿合併一個新的工作簿

Excel工作簿是我們生活中常用到的一個辦公軟體,但有的時候Excel工作簿數量很多,我們需要將它們合併到一個新的工作簿,有什們簡單的方法呢? 操作方法 01我們進行工作簿的合併,先建立一個資料夾,把所有需要合併的到一起的工作簿都放到裡面。 02在新建的資料夾裡面新建一個Excel

Python同時讀取csv檔案,進行簡單的資料處理

#匯入相應模組 import re import os import pandas as pd import numpy as np# 讀取 10個csv 檔案 path = 'E:/round1/' files = os.listdir(path) files_csv =

python實現檔案分配到資料

import os import shutil #path of imgr path = 'D:\\BaiduNetdiskDownload\\newim\\' #path of folder folderPath = 'D:\\BaiduNetdiskDo

Python實現識別條碼/二維碼

    這篇部落格實現的是“Python實現識別多個條碼/二維碼(一)”未完成的解碼任務。由於系統壞了,軟體重灌等一系列原因,所以拖到現在。。不好意思哈。     在上一篇中我們已經能把兩個條形碼找出並框起來了,接下來就是要解碼。先上程式碼吧。 from sys impo

.net中如何把檔案合併一個檔案

懶得再單獨寫一個,所以就加了超級詳細的註釋 前幾個判斷主要是合併sql檔案,什麼樣的sql對應的什麼樣的處理, 最後一個判斷是合併任何檔案 方法的兩個引數:第一個是開啟檔案路徑的集合,第二個引數檔案儲存路徑 private void FileMerge(strin

ROS可執行檔案寫到一個launch檔案教程

問題: 最近執行SLAM建圖和避障的工作,遇到需要開啟很多終端,然後輸入很多指令的問題,感覺比較麻煩! 解決方案: 寫一個launch檔案把這些指令包含進去(具體原理我還不太清楚,是訊息釋出什麼相關的,我先嚐試實現一下功能吧) 先用例子試一下(海龜跟隨例程!)

vs中檔案合併一個檔案顯示

主要是通過修改 .csproj 檔案來達到顯示合併的效果,看測試: 新建一個控制檯程式,然後新建2個類Class1和Class2【它們都是partial類,是不是partial無所謂,主要看你怎麼按業務分塊組合】。 然後記事本開啟.csproj檔案。將Class2的Com

【利用鎖的三種方法來實現執行緒時只執行一個執行緒】

package test.thread;  public class TestSync {      public static void main(String[] args) {          

CSV檔案合併一個

#%% import pandas as pd   import os   SaveFile_Name = r'all.csv'              #合併後要儲存的檔名   #將該資料夾下的

問題17:如何將小字符串拼接一個大的字符串

方案 拼接 join() 生成器 優點 tle .com pan spa 功能:實現字符串拼接 方案一:叠代列表,連續使用‘+’操作依次拼接每一個字符串; r1 = [‘abc‘, ‘123‘, ‘def‘, ‘456‘, ‘hig‘, ‘789‘] s1 = ‘‘

python一維列表合併一個二維列表

>>> list1 = [1,2,3,4,4] >>> list2 = [2,3,4,5,2] >>> z = list(zip(list1,list2)) >>> z [(1, 2), (2, 3), (3, 4)

有序單鏈表合併一個有序單鏈表的java實現

僅作為備註, 便於自己回顧. import java.util.Arrays; /** * @author John Kenrinus Lee * @version 2016-10-20 */ public class MergeSort { public static

Qstring將連續的空格替換一個空格的方法

在QString中提供了正則表示式可以將多個符號替換成一個符號,下面以空格為例,將多個空格替換成一個空格: Qstring str; str.replace(QRegExp("[\\s]+"), "

方法批量刪除Android中無用的資源更新Android Studio2.1工具

一個app開發久了,專案中難免會有越來越多沒有被呼叫到卻沒有被及時刪除的資原始檔, 尤其是體積較大的圖片檔案,於是我們會發現我們的app包越來越大,越來越臃腫。於是,定期的檢測我們工程中哪些資源已經被廢棄,是十分必要的。要做這麼一個工作,分為兩步,一步是查詢到這

Excel技巧1:將符合要求的單元格內容合併一個單元格

Excel技巧1 在一個區域內,如下表中,A列有多個相同的內容,而對應的同一行B列中的值不相同,需要把這些不同的B列值組合到一個單元格中。 比如把所有“Alice”對應的B列情緒合併到C1單元格中,顯示為“ Happy,Angry,Sad,” 如果用E

檔案合併一個二進位制檔案,再將這兩檔案還原

問題:在做專案的時候,winform輔助工具生成了一個資料夾,裡面包含兩個檔案,然後再把這兩個檔案分別上傳到webform裡面,這樣子就顯得複雜而且容易出錯。本來想的是把這兩個檔案壓縮成一個壓縮包,但是給的類庫有點大,最終選擇寫成一個二進位制檔案,接著上傳這個二進位制。這需要

序列流 :把檔案合併一個檔案

import java.util.*; public class SequenceDemo { /**  * 序列流  * 把多檔案合併成一個檔案  */ public static void main(String[] args) throws IOEx