簡體   English   中英

每次運行程序時如何讓 Python 在 excel 中添加新行?

[英]How to get Python to add a new row in excel every time I run the program?

我有一個 function 從沙箱 api 收集數據,並使用 pandas 和 xlsxwriter 組合將此數據寫入 ecxel 表。 我的問題是每次運行程序時如何讓 Python 將新數據寫入新行? 現在,每次我再次運行程序時,它都會覆蓋舊數據。

這是我的代碼:

import pandas as pd
import xlsxwriter
import requests

def collection():
api_url = f'https://sandbox.millistream.com/mws.fcgi?usr=sandbox&pwd=sandbox&cmd=quote&list=39970\
&fields=symbol,name,diff1dprc,lastprice,time&orderby=symbol&order=asc&timezone=Europe/Oslo&filetype=json'
data = requests.get(api_url).json()

my_columns = ['Time', 'Stocks price']
final_dataframe = pd.DataFrame(columns=my_columns)

final_dataframe = final_dataframe.append(
    pd.Series(
        [
            data[2]['time'],
            data[2]['lastprice']
        ],
        index=my_columns),
    ignore_index=True
)

writer = pd.ExcelWriter('Testing.xlsx', engine='xlsxwriter')
final_dataframe.to_excel(writer, 'AKER', index=False)

background_color = '#000000'
font_color = '#E8130F'

string_format = writer.book.add_format(
{
'font_color': font_color,
'bg_color': background_color,
'border': 1
}
)
dollar_format = writer.book.add_format(
{
'num_format': '$0.00',
'font_color': font_color,
'bg_color': background_color,
'border': 1
}
)

writer.sheets['AKER'].set_column('A1:A506', 20, string_format)
writer.sheets['AKER'].set_column('B1:B506', 10, dollar_format)
writer.save()

這是 Excel 中的返回:輸出

這就是我希望返回的樣子:預期產出

您正在覆蓋數據,因為每次運行腳本時,您都會創建一個新的空 dataframe 和 append 數據。 您需要做的是首先加載現有文件 append 的數據,保存並重復。

所以在你的代碼中替換這第 11 行

final_dataframe = pd.DataFrame(columns=my_columns)

final_dataframe = pd.read_excel('Testing.xlsx')

我運行了幾次程序,得到了你想要的 output:

在此處輸入圖像描述

最后,您將一直格式化列 A 直到最大行。 不是什么大問題,但有更優雅的方法來格式化包含數據的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM