2013-03-12 55 views
1

我在不同的子文件夾中有大量的fasta文件(這些只是文本文件)。我需要的是一種通過目錄搜索具有相同名稱的文件並將它們連接成具有輸入文件名稱的文件的方法。我無法手動完成這項工作,因爲我有10000多個基因需要這樣做。連接來自不同文件夾的fasta文件

到目前爲止,我有以下Python代碼,通過其中一個目錄來查找,然後使用這些文件名來搜索其他目錄。這將返回一個列表,其中包含每個文件的完整路徑。

import os 
    from os.path import join, abspath 

    path = '/directoryforfilelist/' #Directory for source list 
    listing = os.listdir(path) 

    for x in listing: 
     for root, dirs, files in os.walk('/rootdirectorytosearch/'): 
      if x in files: 
      pathlist = abspath(join(root,x)) 

我卡在哪裏是如何連接它返回的具有相同名稱的文件。這個腳本的結果如下所示。

/directory1/file1.fasta 
    /directory2/file1.fasta 
    /directory3/file1.fasta 
    /directory1/file2.fasta 
    /directory2/file2.fasta 
    /directory3/file2.fasta 

在這種情況下,我需要最終的結果是兩個文件名爲file1.fasta和file2.fasta包含從每個同名文件的文本。

任何導致從哪裏去這裏將不勝感激。雖然我在Python中完成了這部分工作,但完成這項工作對我來說很好。如果重要的話,這將在Mac上運行。

回答

0

沒有測試,但這裏大概是我會怎麼做:

from itertools import groupby 
import os 

def conc_by_name(names): 
    for tail, group in groupby(names, key=os.path.split): 
     with open(tail, 'w') as out: 
      for name in group: 
       with open(name) as f: 
        out.writelines(f) 

這將創建在當前文件夾中的文件(在你的榜樣file1.fastafile2.fasta)。

0

對於列表中的每個文件,以追加模式分配目標文件,讀取源文件的每一行並將其寫入目標文件。

假設目標文件夾是空的並且不在/ rootdirectorytosearch中。

相關問題