问题描述
所以我有以下程序:
client = Socrata("www.datos.gov.co",None)
# Example authenticated client (needed for non-public datasets):
# client = Socrata(www.datos.gov.co,# MyAppToken,# userame="user@example.com",# password="AFakePassword")
# First results,returned as JSON from API / converted to Python list of
# dictionaries by sodapy.
results = client.get("gt2j-8ykr",limit=800000)
# Convert to pandas DataFrame
results_df = pd.DataFrame.from_records(results)
现在,每次我运行代码时,变量'results'都具有预期的新更新值,因此数据框'results_df'也是如此。我想要做的是保存程序执行的所有GET请求(更确切地说,我只需要len(results_df))。有人建议我列出并附加len(results_df)。但是,这显然不起作用,因为它只是附加了len(results_df)的当前值,它没有保存len(results_df)的先前值,因此每次我运行代码时,我都会得到一个包含当前单个值的列表的len(results_df)。但是,我想要的是保存以前程序执行的len(results_df)以前值的列表。
对不起,如果这是一个愚蠢的问题,但是我是编码新手,我在任何地方都找不到任何解决方案。谢谢
解决方法
使用持久性文件存储并将结果长度存储在光盘上:
def write_log_of_lengths(dataframelength):
from datetime import datetime
import os.path
log_name = "my_request_log"
if not os.path.isfile(log_name):
with open(log_name,"w") as f:
f.write( f"datetime,lenght_data\n" )
with open(log_name,"a") as f:
f.write( f"{datetime.now()},{dataframelength}\n" )
然后使用
# your code
results_df = pd.DataFrame.from_records(results)
write_log_of_lengths(len(results_df))
示例:
write_log_of_lengths(5)
write_log_of_lengths(7)
write_log_of_lengths(22)
通过以下方式获取文件
datetime,lenght_data
2020-09-07 07:37:17.889504,5
2020-09-07 07:37:17.892475,7
2020-09-07 07:37:17.895424,22