Python - 每小时复制一次实时 Excel 文件 - 无数据刷新

Python - Making copy of live Excel file every hour - no data refreshment

提问人:Prmake 提问时间:10/18/2022 最后编辑:Prmake 更新时间:10/18/2022 访问量:74

问:

我正在处理一个“实时”Excel 文件,该文件的数据连接每 5 分钟刷新一次(包括时间戳)。 由于每次刷新都会丢失以前的数据,因此我想每小时将数据复制到一个新文件中,以便进行数据分析。

我写了这段代码,它通常有效,因为它通过从实时 Excel 复制数据每小时创建一个新文件:

import pandas as pd
from datetime import datetime as dt
import schedule
import time

df = pd.read_excel("import.xlsx", sheet_name='Raw Data')
def export():
    now =dt.now()
    dt_string = now.strftime("%Y%m%d %H%M%S")
    df.to_excel("export" + dt_string + ".xlsx", sheet_name='Raw Data')

schedule.every(3600).seconds.do(export)

while 1:
    schedule.run_pending()
    time.sleep(1)

不幸的是,所有新的 Excel 文件都具有相同的数据和时间戳(在我开始运行代码的那一刻)。首先我想,除了刷新数据外,还需要每 x 分钟保存一次实时 excel 文件,但是,不时手动保存文件没有任何区别。

我是否可以对我的 Python 代码进行任何更改,以便每小时在每个副本中获取最新数据,而不仅仅是运行开始时的初始数据?

Python Excel 熊猫

评论

2赞 Hampus Larsson 10/18/2022
您只在代码中读取一次 excel 文件,因此无论“重复”导出多少次,内存中仍然只有相同的 excel 文件。
0赞 Sam Mason 10/19/2022
为什么不使用 shutil.copy 来复制文件而不是通过 Pandas?我担心通过 Pandas 会丢弃您将来可能想要的部分文件

答:

0赞 Anthony DiGiovanna 10/18/2022 #1

我认为数据没有更改的原因是您的 df 变量在 export() 函数之外设置了一次。要修复,您只需要将赋值移动到您的函数中:

import pandas as pd
from datetime import datetime as dt
import schedule
import time

def export():
    df = pd.read_excel("import.xlsx", sheet_name='Raw Data') #Moved this line
    now =dt.now()
    dt_string = now.strftime("%Y%m%d %H%M%S")
    df.to_excel("export" + dt_string + ".xlsx", sheet_name='Raw Data')

schedule.every(3600).seconds.do(export)

while 1:
    schedule.run_pending()
    time.sleep(1)