【问题标题】:Python POST fastq filePython POST fastq 文件
【发布时间】:2020-08-27 02:54:13
【问题描述】:

我想知道如何通过请求发布 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'

【问题讨论】:

  • 看起来 IANA 没有为该格式分配任何内容 (iana.org/assignments/media-types/media-types.xhtml),所以我将使用 text/plain
  • 文件服务器端如何下载?
  • 我也认为这行不通。当我尝试这个时,我得到:AttributeError: 'bytes' object has no attribute 'content'
  • 这是一个不同的问题。但downloadserver side 通常不在同一个句子中。

标签: python python-3.x python-requests file-format fastq


【解决方案1】:

你运行什么会得到 cmets 中提到的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)

然后您的服务器端将成功打印出您上传文件中序列的 ​​ID。

这只是一个简单的概念证明,它可以工作,您可以对上传的文件做任何您喜欢的事情 - 将其保存到磁盘、处理内容、显示内容等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多