1

我在不同的子文件夹中有大量 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 上运行。

4

2 回答 2

0

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

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

于 2013-03-12T21:39:23.200 回答
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您的示例中)。

于 2013-03-12T21:40:53.540 回答