【问题标题】:Exporting API output to txt file将 API 输出导出到 txt 文件
【发布时间】:2021-12-23 05:46:50
【问题描述】:

我用 FastAPI 创建了一个简单的 API,我想将输出导出到一个文本文件 (txt)。

这是一个简化的代码

import sys
from clases.sequence import Sequence
from clases.read_file import Read_file
from fastapi import FastAPI
 
app = FastAPI()
 
@app.get("/DNA_toolkit")
def sum(input: str):                        # pass the sequence in, this time as a query param
    DNA = Sequence(input)                         # get the result (i.e., 4)
    return {"Length": DNA.length(),         # return the response
            "Reverse": DNA.reverse(),
            "complement":DNA.complement(),
            "Reverse and complement": DNA.reverse_and_complement(),
            "gc_percentage": DNA.gc_percentage()
            } 


这是输出

{"Length":36,"Reverse":"TTTTTTTTTTGGGGGGGAAAAAAAAAAAAAAAATAT","complement":"ATATTTTTTTTTTTTTTTTCCCCCCCAAAAAAAAAA","Reverse and complement":"AAAAAAAAAACCCCCCCTTTTTTTTTTTTTTTTATA","gc_percentage":5.142857142857143}

我想要的文件

Length 36
Reverse TTTTTTTTTTGGGGGGGAAAAAAAAAAAAAAAATAT
complement ATATTTTTTTTTTTTTTTTCCCCCCCAAAAAAAAAA
Reverse and complement AAAAAAAAAACCCCCCCTTTTTTTTTTTTTTTTATA

有一个简单的方法可以做到这一点。这是我第一次使用 API,我什至不知道这有多大可能

【问题讨论】:

  • 欢迎来到 Stack Overflow!您似乎在要求某人为您编写一些代码。 Stack Overflow 是一个问答网站,而不是代码编写服务。请see here学习如何写出有效的问题。
  • 他已经提供了代码。问题可以概括为如何将字典写入文件。这里有一些选项stackoverflow.com/questions/36965507/…
  • 不要使用sum作为[函数]名称

标签: python fastapi


【解决方案1】:
dict1={"Length":36,"Reverse":"TTTTTTTTTTGGGGGGGAAAAAAAAAAAAAAAATAT","complement":"ATATTTTTTTTTTTTTTTTCCCCCCCAAAAAAAAAA","Reverse and complement":"AAAAAAAAAACCCCCCCTTTTTTTTTTTTTTTTATA","gc_percentage":5.142857142857143}

with open("output.txt","w") as data:
    for k,v in dict1.items():
        append_data=k+" "+str(v)
        data.write(append_data)
        data.write("\n")

输出:

Length 36
Reverse TTTTTTTTTTGGGGGGGAAAAAAAAAAAAAAAATAT
complement ATATTTTTTTTTTTTTTTTCCCCCCCAAAAAAAAAA
Reverse and complement AAAAAAAAAACCCCCCCTTTTTTTTTTTTTTTTATA
gc_percentage 5.142857142857143

【讨论】:

  • 这毫无意义,因为您必须编写输出。你已经创建了一个字典,他们用这个字典生成了文件。我想每次都创建一个新的字典吗?
  • 这只是我们可以采取的样本res 本身
【解决方案2】:

您可以使用 open 方法创建一个新文件,并写入您的输出。正如@Blackgaurd 告诉你的,这不是代码编写服务。

另外我写这段代码非常快,所以可能会出现一些语法错误

import sys
import datetime
from clases.sequence import Sequence
from clases.read_file import Read_file
from fastapi import FastAPI

app = FastAPI()

@app.get("/DNA_toolkit")
def sum(input: str):                        # pass the sequence in, this time as a query param
    DNA = Sequence(input)                    # get the result (i.e., 4)
    res = {"Length": DNA.length(),         # return the response
        "Reverse": DNA.reverse(),
        "complement":DNA.complement(),
        "Reverse and complement": DNA.reverse_and_complement(),
        "gc_percentage": DNA.gc_percentage()
        }

    #with open('result.txt', 'w+') as resFile:
        #for i in res:
            #resFile.write(i+" "+res[i]+"\n")

        #resFile.close()

        # Undo the above comment if you don't want to save result into 
        #file with unique id, else go with the method I wrote below...
    filename = str(datetime.datetime.now().date()) + '_' + str(datetime.datetime.now().time()).replace(':', '.')
    with open(filename+'.txt', 'w+') as resFile:
        for i in res:
            resFile.write(i+" "+res[i]+"\n")

        resFile.close()

    return {"Length": DNA.length(),         # return the response
        "Reverse": DNA.reverse(),
        "complement":DNA.complement(),
        "Reverse and complement": DNA.reverse_and_complement(),
        "gc_percentage": DNA.gc_percentage()
        }

【讨论】:

  • 您正在将文件保存在 API 服务器上。可能,OP 需要在客户端调用 API 时保存它
  • 好吧,我不知道 FastApi,所以我真的不知道,我使用过烧瓶。至于在客户端保存文件,OP可以提出一个下载请求,文件就会开始下载
  • 我明白了。请注意数据修改,因为该代码会在每次 API 调用时覆盖服务器上的相同文件。我的意思是:在您下载文件之前,有人可能会向此端点发送另一个请求。
  • 是的,你是对的,但这已经很远了,OP 可以用这种方式对其进行编码,通过编写一个算法来检查文件是否已经存在,然后它只会分配一个特定的唯一id 到文件名 Ex-with open('file_~uniqueid~.txt', 'w+'): ........
  • 您可能希望在回答中添加此信息。
【解决方案3】:

我会假设您已经以某种方式调用您的 API 获取数据。

# data = request.get(...).json()

# save to file:
with open("DNA_insights.txt", 'w') as f: 
    for k, v in data.items(): 
        f.write(f"{k}: {v}\n")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2022-01-20
    • 2013-02-19
    • 2019-10-11
    • 1970-01-01
    相关资源
    最近更新 更多