使用python subprocess.call将fasta序列的计数写入文件

使用python subprocess.call将fasta序列的计数写入文件,python,linux,bash,subprocess,fasta,Python,Linux,Bash,Subprocess,Fasta,我有14000多个fasta文件,我只想保留那些包含5个序列的文件。我知道我可以使用以下bash命令获取单个fasta文件中的序列数: grep -c "^>" filename.fasta 因此,我的方法是将每个文件中的文件名和序列计数写入一个文本文件,然后我可以使用它来隔离我想要的序列。要在这么多文件上运行grep命令,我使用subprocess.call: import subprocess import os with open("five_seqs.txt", "w") a

我有14000多个fasta文件,我只想保留那些包含5个序列的文件。我知道我可以使用以下bash命令获取单个fasta文件中的序列数:

grep -c "^>" filename.fasta
因此,我的方法是将每个文件中的文件名和序列计数写入一个文本文件,然后我可以使用它来隔离我想要的序列。要在这么多文件上运行grep命令,我使用subprocess.call:

import subprocess
import os


with open("five_seqs.txt", "w") as f:
    for file in os.listdir("/Users/vivaksoni1/Downloads/DA_CDS/fasta_files"):
        f.write(file),
        subprocess.call(["grep", "-c", "^>", file], stdout = f)
我的部分问题是grep命令是“^>”,但子流程要求每个参数都有自己的引号。当我基本上要作为参数输入时,如何使用“^>”:“^>”

另外,是否必须在f.write(文件)之后添加f.write(“\n”)?当前,我的输出只是一个文本文件,每个条目彼此相邻,subprocess命令只是将每个文件名打印到终端,并声明没有找到这样的文件:


grep:MZ23900789.fasta:没有这样的文件或目录

请尝试以下代码,它应该适用于您的示例。它将写入文件名、制表符分隔符和序列号(即
字符)。 使用
Popen
communicate
可以在处理输出时提供更好的灵活性。在Ubuntu上测试

import subprocess
import os

fasta_dir = "/Users/vivaksoni1/Downloads/DA_CDS/fasta_files/"

with open("five_seqs.txt", "w") as f:
    for file in os.listdir(fasta_dir):
        f.write(file + '\t')
        grep = subprocess.Popen(["grep", "-c", "^>", fasta_dir + file], stdout = subprocess.PIPE)
        out, err = grep.communicate()
        f.write(out + '\n')

您是否在
子流程调用()上尝试过:
shell=True
?示例:
subprocess.call([“grep”、“-c”、“^>”,file],stdout=f,shell=True)
Hi,我确实尝试过,但不幸没有成功。grep命令仍然没有写入文件,我正在为每个文件向终端输出:用法:grep[-abcdefghhiijllmnooqrsusuvwxz][-A num][-B num][-C[num][-e pattern][-f file][-binary files=value][-color=when][-context[=num][-directories=action][-label][-line buffered][-null][pattern][file……]获取一个文件,任何只用于测试的文件:
grep-c'^>'fasta_文件
。。如果可行,请尝试:
子流程调用([“grep”、“-c”、“^>”,file],stdout=f,shell=True)
否则会出现其他问题,请在每次调用时对调用进行剖析和测试
pdb
是你的朋友--
ipdb
是你最好的朋友引用python引号中的参数
“^>”
“^>”
。我尝试在python引号中引用参数,但得到的终端响应与以前相同。在逐行检查代码之后,我仍然无法破译问题的根源。