首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python subprocess.call将fasta序列的计数写入文件

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

Stack Overflow用户
提问于 2016-04-25 13:06:37
回答 1查看 282关注 0票数 1

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

代码语言:javascript
运行
复制
grep -c "^>" filename.fasta

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

代码语言:javascript
运行
复制
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")?目前,我的输出只是一个文本文件,每个条目相邻,子进程命令只将每个文件名打印到终端,并声明没有找到这样的文件:

grep: or 23900789. file :没有这样的文件或目录

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-30 18:16:56

尝试下面的代码,它应该适用于您的示例。它将写入文件名加上一个制表符分隔符和序列数(即>字符)。使用Popencommunicate在处理输出时提供了更好的灵活性。在Ubuntu上测试过。

代码语言:javascript
运行
复制
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')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36841505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档