POST fastq文件

问题描述 投票:0回答:1

我想知道如何通过请求来发布一个fastq文件python对象。

from Bio import SeqIO
seqs = SeqIO.parse("/path/to/seqfile.fastq", "fastq")

我使用Bio来解码一个fastq文件,我想先发送整个fastq文件,然后在服务器端创建对象,或者在服务器端发布对象并解码对象。我想发送整个fastq文件,然后在服务器端创建对象,或者,发布对象并在服务器端解码对象。

最好是发送整个fastq文件,我知道对于一个文本文件你会这样做。

files = {'upload_file': ('foobar.txt', open('file.txt','rb'), 'text/x-spam')}

r = requests.post(url, files=files)

所以基本的问题是,fastq文件的头是什么?

比如,text : 'textx-spam', json : 'applicationjson'等。

python python-3.x python-requests file-format fastq
1个回答
0
投票

你运行什么可以给你 AttributeError 评论中提到的?

从你的问题中并不完全清楚你是否正在这样做,但你不应该尝试上传结果的。SeqIO.parse 作为一个文件。这将返回一个文件对象的迭代器,如果你想通过HTTP以JSON格式发送对象,你可以用自定义的JSON编码器解码器对其进行序列化和解码。

另外,你也可以在上传中直接发送文件的文本内容,然后使用文本封装器将其保存到磁盘中,并使用Biopython进行解析。

一个Flask端点的例子,它接受一个FASTQ文件,然后用一个 StringIO 包装器将是。

from io import StringIO

from flask import Flask, request
from Bio import SeqIO

app = Flask(__name__)


@app.route('/', methods=['POST'])
def simple_upload():
    if request.method == 'POST':
        if 'file' not in request.files:
            print('No file part')
            return 'Error', 500
        file = request.files['file']
        if file.filename == '':
            print('No selected file')
            return 'Error', 500
        if file:
            for s in SeqIO.parse(StringIO(file.read().decode('utf-8')), 'fastq'):
                print(s.id)
            print(file.content_type)
    return 'OK', 200

如果你运行。

import requests
files = {'file': ('my_test_file.fastq', open('my_test_file.fastq', 'rb'), 'text/plain')}
url='http://127.0.0.1:5000/'
r = requests.post(url, files=files)

那么你的服务器端就会成功地打印出你上传的文件中的序列ID。

这只是一个简单的概念验证,你可以对上传的文件做任何你想做的事情--保存到磁盘,处理内容,显示内容等等。

© www.soinside.com 2019 - 2024. All rights reserved.