我怎样才能用文件名中的匹配字符串来分类两个文件?
how can I cat two files with a matching string in the filename?
所以我有一个包含 ~162K 文件的目录。其中一半文件的文件名为“uniquenumber.fasta
”,另一半文件的文件名为“uniquenumber.fasta letters
”。例如:
12345.fasta
12345.fasta Somebacterialtaxaname
67890.fasta
67890.fasta Someotherbacterialtaxaname
...for another many thousand "pairs"
我想将共享唯一 fasta 编号的两个文件放在一起。串联的顺序无关紧要(即哪些内容在新创建的组合文件中首先出现)。我已经在命令行中尝试了一些 grep 的再现和一些糟糕的 python 脚本,但我觉得这比我正在做的更像是一个微不足道的问题。建议?
可能有很多方法可以实现这一点,但第一个想到的是使用 unix 命令 find
。
http://en.wikipedia.org/wiki/Find#Execute_an_action
find
命令将按照您指定的模式打印文件名。使用 -name
和 -exec
标志,您可以指定文件名中应包含哪些字符,或 运行 附加命令来过滤输出。
如果我要解决这个问题,我可能会遍历目录中的所有文件,并且 运行 一个 -name
模式或 -exec
模式 "find" 匹配文件。然后 |
两个文件名到 cat
并将该输出重定向到一个新文件,希望将两者连接起来。希望对您有所帮助!
这是 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
文件的末尾写一个换行符,然后读入 "space file" 的内容并将它们写入 .fasta
文件的末尾。由于我们使用 with
上下文管理器,因此我们不需要在完成后专门关闭文件。
所以我有一个包含 ~162K 文件的目录。其中一半文件的文件名为“uniquenumber.fasta
”,另一半文件的文件名为“uniquenumber.fasta letters
”。例如:
12345.fasta
12345.fasta Somebacterialtaxaname
67890.fasta
67890.fasta Someotherbacterialtaxaname
...for another many thousand "pairs"
我想将共享唯一 fasta 编号的两个文件放在一起。串联的顺序无关紧要(即哪些内容在新创建的组合文件中首先出现)。我已经在命令行中尝试了一些 grep 的再现和一些糟糕的 python 脚本,但我觉得这比我正在做的更像是一个微不足道的问题。建议?
可能有很多方法可以实现这一点,但第一个想到的是使用 unix 命令 find
。
http://en.wikipedia.org/wiki/Find#Execute_an_action
find
命令将按照您指定的模式打印文件名。使用 -name
和 -exec
标志,您可以指定文件名中应包含哪些字符,或 运行 附加命令来过滤输出。
如果我要解决这个问题,我可能会遍历目录中的所有文件,并且 运行 一个 -name
模式或 -exec
模式 "find" 匹配文件。然后 |
两个文件名到 cat
并将该输出重定向到一个新文件,希望将两者连接起来。希望对您有所帮助!
这是 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
文件的末尾写一个换行符,然后读入 "space file" 的内容并将它们写入 .fasta
文件的末尾。由于我们使用 with
上下文管理器,因此我们不需要在完成后专门关闭文件。