可能性的问题:使用Pandas读取Excel文件

3
我们正在产品设计阶段。想法是,代码将从Excel读取一组值,并存入SQL中。
要求如下:
  1. 工作簿可以被我们程序外的多个用户访问
  2. 如果我们程序正在运行时出现问题,工作簿必须保持可访问状态(即不会损坏)
  3. 程序将在没有用户在文件中时执行
目前我们考虑以以下简单方式使用pandas:
    import pandas as pd
    from pandas import ExcelWriter
    from pandas import ExcelFile

    df = pd.read_excel('File.xlsx', sheetname='Sheet1')

    """Some code to write df in to SQL"""

如果这段代码在Excel仍然打开的情况下离线,是否存在任何可能性,使得文件仍然被锁定于程序中或者遭到破坏?
为了澄清一下,我们可以想象一些灾难性的情况,例如服务器崩溃或停电。
我已经搜索了相关问题,但是没有找到类似的问题,请指导我。同时,我也已经阅读了Pandas的read_excel文档,详见:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html

文件只会在 read_excel 调用返回之前打开。 - gmds
如果你的代码只是读取文件,那么它就不会破坏它。如果你计划写入文件,那么你需要采取预防措施。 - stacksonstacks
1个回答

1

根据您提供的代码和我对pandas和xlrd代码的阅读,给定的文件将仅以读取模式打开。据我所知,这意味着您所做的事情没有比以任何其他方式读取文件更多的风险 - 毕竟,您必须读取它才能使用它。

如果这不能让您充分放心,您可以通过向pandas提供BytesIO对象而不是路径来最小化文件打开时间,更重要的是不将您的文件暴露给外部代码:

import io
import pandas as pd

data = io.BytesIO(open('File.xlsx', 'rb').read())
df = pd.read_excel(data, sheetname='Sheet1')

# etc

这样一来,您的文件只会在读入内存的时间内打开,而且 pandas 和 xlrd 只会使用数据的副本。


1
谢谢!被选为答案。如果有人能提供更多文档,那就太棒了。 - tuxtuxtux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接