我在不同的子文件夹中有大量的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上运行。
答案 0 :(得分:0)
对于列表中的每个文件,以附加模式分配目标文件,读取源文件的每一行并将其写入目标文件。
假设目标文件夹为空,并且不在/ rootdirectorytosearch中。
答案 1 :(得分: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.fasta
和file2.fasta
)。