【问题标题】:Concatenating fasta files from different folders连接来自不同文件夹的fasta文件
【发布时间】:2013-02-28 15:18:54
【问题描述】:

我在不同的子文件夹中有大量 fasta 文件(这些只是文本文件)。我需要的是一种在目录中搜索具有相同名称的文件并将它们连接到具有输入文件名称的文件中的方法。我无法手动执行此操作,因为我需要为 10000 多个基因执行此操作。

到目前为止,我有以下 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 上运行。

【问题讨论】:

    标签: python loops concatenation


    【解决方案1】:

    未测试,但大致是我要做的:

    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)。

    【讨论】:

      【解决方案2】:

      对于列表中的每个文件,以追加模式分配目标文件,读取源文件的每一行并将其写入目标文件。

      假设目标文件夹一开始是空的,并且不在 /rootdirectorytosearch 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 2012-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多