如何在文件名中使用匹配的字符串捕获两个文件?

时间:2015-01-19 04:18:46

标签: python python-2.7 filenames cat

所以我有一个包含~162K文件的目录。这些文件中有一半的文件名为“uniquenumber.fasta”,另一半文件的文件名为“uniquenumber.fasta letters”。例如:

12345.fasta
12345.fasta Somebacterialtaxaname
67890.fasta
67890.fasta Someotherbacterialtaxaname
...for another many thousand "pairs"

我想把两个共享独特fasta号的文件拼凑在一起。并置的顺序无关紧要(即哪些内容首先出现在新创建的组合文件中)。我已经在命令行中尝试了一些grep的演绎和一些糟糕的python脚本,但我觉得这比我制作它更像是一个微不足道的问题。建议?

2 个答案:

答案 0 :(得分:0)

这是Python中的一个解决方案(它将在Python 2和3中保持不变)。这假定每个文件XXXXX.fasta只有一个匹配的XXXXX.fasta stringofstuff文件。

import glob

fastafiles = sorted(glob.glob("*.fasta"))

for fastafile in fastafiles:
    number = fastafile.split(".")[0]
    space_file = glob.glob(number + ".fasta *")
    with open(fastafile, "a+") as fasta:
        with open(space_file[0], "r") as fasta_space:
            fasta.write("\n")
            fasta.writelines(fasta_space.readlines())

以下是它的工作原理:首先,将所有*.fasta文件的名称放入列表中(我对列表进行排序,但并不是绝对必要的)。接下来,文件名将在.上拆分,并存储第一部分(文件名中的数字)。然后,我们搜索匹配的XXXXX.fasta something文件,假设只有其中一个,我们以追加模式打开.fasta文件,以读取模式打开.fasta something文件。我们在.fasta文件的末尾写一个换行符,然后读入“空格文件”的内容并将它们写到.fasta文件的末尾。由于我们使用with上下文管理器,因此在完成后我们无需专门关闭文件。

答案 1 :(得分:-1)

实现这一目标的方法可能很多,但首先要考虑的是使用unix命令find

http://en.wikipedia.org/wiki/Find#Execute_an_action

find命令将打印指定模式后面的文件名。使用-name-exec标志,您可以指定文件名中应包含的字符,或运行其他命令来过滤输出。

如果我解决了这个问题,我可能会遍历目录中的所有文件,并运行一个-name模式或-exec模式来“找到”匹配文件。然后将|两个文件名改为cat并将该输出重定向到一个新文件,希望将两者连接起来。希望有所帮助!