我想知道如何通过请求发布fastq文件/python对象。
from Bio import SeqIO
seqs = SeqIO.parse("/path/to/seqfile.fastq", "fastq")
我使用Bio来解码fastq文件。我希望发送整个fastq文件,然后在服务器端创建对象,或者在服务器端发布对象并解码对象。
最好是发送整个fastq文件,我知道对于一个文本文件您会这样做:
files = {'upload_file': ('foobar.txt', open('file.txt','rb'), 'text/x-spam')}
r = requests.post(url, files=files)
因此,最基本的问题是,fastq文件的头是什么?
比如,文本:'text/x-spam',json:'application/json',等。
发布于 2020-05-16 09:46:26
您运行的是给您提供注释中提到的AttributeError
的什么?
从您的问题中还不完全清楚这是否是您要做的,但您不应该尝试将SeqIO.parse
的结果作为一个文件上载。它返回文件对象的迭代器,如果希望通过HTTP将对象作为JSON发送,则可以使用自定义JSON编码器/解码器序列化和解码文件对象。
或者,您只需在上传中发送文件的文本内容,然后将其保存到磁盘/使用文本处理程序并使用Biopython进行解析。
接受FASTQ文件、然后使用StringIO
包装器解析内容的Flask端点示例如下:
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)
然后,服务器端将成功地打印出上传文件中序列的in。
这只是一个简单的概念证明,这是可行的,你可以做任何你喜欢对上传的文件-保存到磁盘,处理内容,显示内容等。
https://stackoverflow.com/questions/61731852
复制相似问题