如果文件的上次修改日期是今天,如何将Excel文件导入Pandas?

时间:2015-07-07 02:17:52

标签: python excel pandas

所以我正在尝试编写一个Python脚本,将excel文件导入Pandas数据帧(条件是该文件是在特定日期修改的,例如今天):

import pandas as pd
import glob
import os
import datetime

def report():
    for x in glob.glob("../*.xlsx"):
        modx = os.path.getmtime(x)
        xmod = datetime.datetime.fromtimestamp(modx)
    if datetime.datetime.today() == xmod:
        return x

我考虑过直接从函数中导入excel文件:

if datetime.datetime.today() == xmod:
    df = pd.read_excel(x)
    return df

尝试修改数据框(尝试导入后)会产生以下结果:

  File "<ipython-input-56-e6fa18118137>", line 1, in <module>
df = pd.read_excel(report())

  File "..\excel.py", line 151, in read_excel
return ExcelFile(io, engine=engine).parse(sheetname=sheetname, **kwds)

  File "..\excel.py", line 196, in __init__
raise ValueError('Must explicitly set engine if not passing in'

ValueError: Must explicitly set engine if not passing in buffer or path for io.

无法深入了解。我甚至不确定是否需要定义一个函数。

  • 我是否直接从该函数导入Pandas DataFrame?要么 把它分开?
  • 我如何设置引擎?

3 个答案:

答案 0 :(得分:0)

首先,请使用datetime.today().date()。这将确保与xmod的正确比较格式。

其次,glob循环有点令人困惑。您确定要forif处于相同的缩进级别吗?或者if是否应该在for循环中?无论哪种方式,都需要修复。

另外,尽量不要传递函数。如错误所示,显式传递路径或缓冲区。否则,它将询问您使用哪种引擎,这比您正在做的事情更有价值。

所有其他,只需订阅最佳编程/ Python实践。

In [1]: import pandas as pd
    ...: from datetime import datetime
    ...: import os

In [2]: def load_if_modified_today(xls):
   ...:     modx = os.path.getmtime(xls)
   ...:     xmod = datetime.fromtimestamp(modx)
   ...:     if datetime.today().date() == xmod.date():
   ...:         df = pd.read_excel(xls)
   ...:         return df

In [3]: e = 'trades.xlsx'
   ...: df = load_if_modified_today(e)
   ...: df.head()
Out[3]: 
           System Name  Symbol  Unit Position Entry Date Entry Time  \
0  TB Turtle FX Majors  EURUSD     1    Short 2014-12-02        Day   
1  TB Turtle FX Majors  EURUSD     1    Short 2014-12-05        Day   
2  TB Turtle FX Majors  EURUSD     1     Long 2014-12-10        Day   
3  TB Turtle FX Majors  EURUSD     1     Long 2014-12-16        Day   
4  TB Turtle FX Majors  EURUSD     1    Short 2014-12-17        Day   

   Entry Order Price  Stop Price   Risk%  Quantity  Entry Fill  
0             1.2420      1.2428  0.0024         6      1.2418  
1             1.2284      1.2297  0.0022         4      1.2283  
2             1.2447      1.2434  0.0017         3      1.2448  
3             1.2496      1.2486  0.0026         5      1.2499  
4             1.2385      1.2397  0.0022         4      1.2383  

答案 1 :(得分:0)

我遇到了同样的ValueError:如果没有为io传入缓冲区或路径,必须显式设置引擎。我将代码更改为:

data = pd.read_excel(R"D:\\file.xlsx")

有效。

答案 2 :(得分:-1)

我遇到了类似的问题,结果发现安装的不同python框架版本相互冲突。我删除了其中一个(anaconda),保存并更新了普通的python2.7并且所有内容都已修复。