所以我有一个包含~162K文件的目录。这些文件中有一半的文件名为“uniquenumber.fasta
”,另一半文件的文件名为“uniquenumber.fasta letters
”。例如:
12345.fasta
12345.fasta Somebacterialtaxaname
67890.fasta
67890.fasta Someotherbacterialtaxaname
...for another many thousand "pairs"
我想把两个共享独特fasta号的文件拼凑在一起。并置的顺序无关紧要(即哪些内容首先出现在新创建的组合文件中)。我已经在命令行中尝试了一些grep的演绎和一些糟糕的python脚本,但我觉得这比我制作它更像是一个微不足道的问题。建议?
答案 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
并将该输出重定向到一个新文件,希望将两者连接起来。希望有所帮助!