【问题标题】:copying fastq information into a new fastq file将 fastq 信息复制到新的 fastq 文件中
【发布时间】:2015-03-20 20:46:26
【问题描述】:

我正在尝试编写一个代码,该代码将打开一个 fasta 文件并从不同的 fastq 文件中提取读取名称 (title)、序列 (seq) 和质量分数 (qual),前提是在 fasta 文件中找到它,并将该 fastq 信息写入一个新的 fastq 文件。但是,我在如何编写最后一部分时遇到了麻烦(我在代码中遇到问题的地方加粗了)。可能有人知道如何编写这部分,或者我在哪里可以找到有关如何在 python 中输入的信息?

到目前为止,我有:

from sys import argv
from Bio.SeqIO.QualityIO import FastqGeneralIterator

script, merged_seqs, raw_seqs = argv
merged_from_raw = "merged_only.fastq"

merged_names = set() 
for line in open(merged_seqs): 
        if line[0] == ">":
                read_name = line.split()[0][1:] 
                merged_names.add(read_name) 

raw_fastq = raw_seqs

temp_handle = open(merged_from_raw, "w") 
for title, seq, qual in FastqGeneralIterator(open(raw_fastq)) :
        if title in merged_names:
                **handle.write() #this is where I don't know how to write what I need in python**

【问题讨论】:

    标签: python fastq


    【解决方案1】:

    除非您有特定的理由自己实现文件解析,否则最好使用 SeqIO 解析器来处理您的输入和输出文件。可能类似于以下内容(警告:我以前从未使用过 Bio,也没有测试过此代码):

    from sys import argv
    from Bio import SeqIO
    
    output_filename = 'merged_only.fastq'
    merged_seqs, raw_seqs = argv[1:2]
    
    # Get fasta iterator, and read source fastq file into a dict-like object
    merged_names = SeqIO.parse(merged_seqs, 'fasta')
    source_seqs = SeqIO.index(raw_seqs, 'fastq')
    
    filtered_seqs = (source_seqs[record.id] for record in merged_names if record.id in source_seqs)
    SeqIO.write(filtered_seqs, output_filename, 'fastq')
    

    【讨论】:

    • 感谢您提供这段代码,我不擅长用 python 编码,所以这是我知道如何做到这一点的唯一真正方法,但使用 SeqIO 似乎是一个更好的选择。唯一的事情是当我在测试数据集上运行代码时,我收到一个空文档。我知道输出中应该有 2 个书面序列,但是它是空的,并且不确定为什么会这样
    • 您可以尝试打印list(merged_names)list(source_seqs) 以查看是否已阅读任何内容。我认为record.idtitle 相同的假设可能是错误的。
    • printing list(merged_names) 和 list(source_seqs) 显示它正在读取我的 source_seqs 而不是 merge_names (fasta) 文件。我很好奇并在一个测试 fastq 文件上对其进行了测试(所以两个文件都是 fastq 而不是一个 fasta 和一个 fastq)。这样做成功地写入了输出文件,但奇怪的是这不适用于 fasta 文件。我会尝试更多地使用它,也许我的测试 fasta 文件格式不正确。无论如何,感谢您使用 seqio 的建议,这非常有帮助!
    • 尝试使用 SeqIO.write() 创建一个 fasta 文件,然后将其读回。应该可以,您可以比较两个 fasta 文件。
    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多