2013-03-12 77 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中。

相关问题