在附加到csv文件之前在Python中操作API数据

2024-09-26 22:07:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从RESTful API请求数据。第一个请求被写入csv文件,没有任何问题。在csv文件中,数据有5个标题行(包括列标题)、11行实际数据(每行13个字段)和一个EOF行,因此总共有17行数据(打印(response.text)命令后显示的数据)显示在本文末尾

对于API的后续请求,我只想附加11行数据(即第6行到第16行)到现有的csv文件。这是一个我将重复多次的过程,以便创建一个可能包含近百万行数据的大型csv文件。我正在努力找到一种方法来处理API返回的数据,以便只将第6行到第16行写入csv文件

我对编码和Python非常陌生,所以如果您能给我一些建议,我将不胜感激

这是Python“print”命令中的数据(第一个星号是第1行。第五个星号表示列标题的开始,最后一个列标题是“Document RevNum”):

*
*
*Actual Aggregated Generation Per Type (B1620) Data
*
*Document Type,Business Type,Process Type,Time Series ID,Quantity,Curve Type,Resolution,Settlement Date,Settlement Period,Power System Resource  Type,Active Flag,Document ID,Document RevNum
Actual generation per type,Solar generation,Realised,NGET-EMFIP-AGPT-TS-21614701,3250,Sequential fixed size block,PT30M,2020-07-01,21,"Solar",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Wind generation,Realised,NGET-EMFIP-AGPT-TS-21614702,2075.338,Sequential fixed size block,PT30M,2020-07-01,21,"Wind Offshore",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Wind generation,Realised,NGET-EMFIP-AGPT-TS-21614703,1486.519,Sequential fixed size block,PT30M,2020-07-01,21,"Wind Onshore",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Production,Realised,NGET-EMFIP-AGPT-TS-21614704,258,Sequential fixed size block,PT30M,2020-07-01,21,"Other",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Production,Realised,NGET-EMFIP-AGPT-TS-21614705,4871,Sequential fixed size block,PT30M,2020-07-01,21,"Nuclear",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Production,Realised,NGET-EMFIP-AGPT-TS-21614706,0,Sequential fixed size block,PT30M,2020-07-01,21,"Fossil Oil",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Production,Realised,NGET-EMFIP-AGPT-TS-21614707,16448,Sequential fixed size block,PT30M,2020-07-01,21,"Fossil Gas",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Production,Realised,NGET-EMFIP-AGPT-TS-21614708,0,Sequential fixed size block,PT30M,2020-07-01,21,"Fossil Hard coal",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Production,Realised,NGET-EMFIP-AGPT-TS-21614709,783,Sequential fixed size block,PT30M,2020-07-01,21,"Hydro Run-of-river and poundage",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Production,Realised,NGET-EMFIP-AGPT-TS-21614710,118,Sequential fixed size block,PT30M,2020-07-01,21,"Hydro Pumped Storage",Y,NGET-EMFIP-AGPT-06372506,1
Actual generation per type,Production,Realised,NGET-EMFIP-AGPT-TS-21614711,3029,Sequential fixed size block,PT30M,2020-07-01,21,"Biomass",Y,NGET-EMFIP-AGPT-06372506,1
<EOF>

Tags: 数据sizetypeblockgenerationfixedtsper
2条回答

我将您的问题解释为无法将新获取的数据附加到CSV文件。我不确定您是否正在使用一些有助于处理CSV文件的模块,但我只是假设您目前没有

如果您只是以“a”作为第二个参数打开文件,就像(f = open("file.csv","a"))一样,您可以轻松地附加新内容。不过,您必须首先剥离EOF行,然后再追加一个新的行,但我认为这不是问题所在。 希望我能帮助您,请告诉我是否正确理解您的问题:)

顺便说一句,我建议为这个或类似sqlite3的东西寻找一个CSV模块

似乎有效的解决方案如下:

回想一下,API返回给定日期的逗号分隔的长字符串数据。 当数据写入csv文件时,它显示为4行我不感兴趣的“标题”数据、1行列标题数据(13列)、11行我感兴趣的数据(所有13列中都有数据)和1行我不需要的(“EOF”)

在第一个API查询中,我想创建一个仅包含列标题和11行数据的csv文件,丢弃数据的前4行(冗余信息)和最后一行(“EOF”)

在所有后续的API查询中,我只想将11行数据附加到已经创建的csv文件中

API响应以字符串形式返回

以下代码排除了前4行和最后一行(“EOF”),但仍将列标题和11行有用数据写入新创建的csv文件:

# Write to .CSV
with open('C:/Users/Paul/.spyder-py3/Elexon API Data 05.csv', "w") as f:
    f.write(api_response.text[59:-5])

API响应字符串的前59个字符和最后5个字符将始终相同,因此我可以确信这将适用于初始API响应

对于后续的API响应,我使用以下代码附加到csv文件:

# Now append the api response data to the CSV file
with open('C:/Users/Paul/.spyder-py3/Elexon API Data 05.csv', "a") as f:
    f.write(api_response.text[248:-5])

这将从附加到csv文件的API响应中排除前248个字符和最后5个字符。字符串的前248个字符将始终包含相同的冗余信息,最后5个字符将始终包含“”,因此我可以再次确信,只有我感兴趣的11行数据将附加到csv文件中

对于这个特定的案例,解决方案比我预期的要简单,这要感谢CodingGuy指导我从api响应的开始和结束剥离数据,并探索我正在处理的数据类型

如果我的解决方案有问题,请告诉我。同样,我总是有兴趣学习Python中更复杂的数据处理方法

相关问题 更多 >

    热门问题