微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用olefile方法从目录中打开excel文件

如何解决使用olefile方法从目录中打开excel文件

美好的一天,

我试图打开多个 excel 文件 (xls) 文件并将它们放在一个数据框中。我正在使用 .glob() 访问此处的文件

all_files = glob.glob('D:\Anaconda Hub\ARK analysis\Ark analysis\data\year2021\\february\\**.xls')

示例输出一个列表,因此:

['D:\\Anaconda Hub\\ARK analysis\\Ark analysis\\data\\year2021\\february\\ARK_Trade_02012021_0619PM_EST_601875e069e08.xls','D:\\Anaconda Hub\\ARK analysis\\Ark analysis\\data\\year2021\\february\\ARK_Trade_02022021_0645PM_EST_6019df308ae5e.xls','D:\\Anaconda Hub\\ARK analysis\\Ark analysis\\data\\year2021\\february\\ARK_Trade_02032021_0829PM_EST_601b2da2185c6.xls','D:\\Anaconda Hub\\ARK analysis\\Ark analysis\\data\\year2021\\february\\ARK_Trade_02042021_0637PM_EST_601c72b88257f.xls','D:\\Anaconda Hub\\ARK analysis\\Ark analysis\\data\\year2021\\february\\ARK_Trade_02052021_0646PM_EST_601dd4dc308c5.xls','D:\\Anaconda Hub\\ARK analysis\\Ark analysis\\data\\year2021\\february\\ARK_Trade_02082021_0629PM_EST_6021c739595b0.xls'..]

我正在使用 olefile 方法。这是我的代码

import os
import glob
import olefile as ol
import pandas as pd

 # using olefile to iterate to extract each excel file to be readible 
with open(all_files,'r') as file:
    if file.endswith('.xls'):
        ole = ol.OleFileIO(file)
        if ole.exists('Workbook'):
            d = ole.openstream('Workbook')
            df = pd.read_excel(d,engine='xlrd',header=3,skiprows=3)
            print(df.head())

但是,我收到此错误

TypeError: expected str,bytes or os.pathLike object,not list

我不明白为什么会出现此错误。我正在遍历列表以选择一个字符串并将其传递给其余的步骤... 将不胜感激帮助正确执行此操作并使 Excel 文件在单个数据框中输出。 提前致谢

解决方法

我相信您使用的是旧格式/版本的 Microsoft Excel?

在这种情况下,错误消息 TypeError: expected str,bytes or os.PathLike object,not list 非常有用。您的代码包含以下行:with open(all_files,'r') as file:,您已将整个列表传递给 open()

试试下面的代码:

import os
import glob
import olefile
import pandas as pd

all_files = glob.glob('excelfiles/*.xls')

for file in all_files:
    with olefile.OleFileIO(file) as ole:     # Since olefile v0.46
        if ole.exists('Workbook'):
            d = ole.openstream('Workbook')
            df = pd.read_excel(d,engine='xlrd',header=3,skiprows=3)
            print(df.head())

我从共享文件中获得的输出:

   ARKG  2021-02-01  Sell  ... PACIFIC BIOSCIENCES OF CALIFORNIA INC  210508  0.0645
0  ARKK  2021-02-01   Buy  ...                 FATE THERAPEUTICS INC  154509  0.0608
1  ARKK  2021-02-01   Buy  ...                            PACCAR INC  263029  0.1024
2  ARKK  2021-02-01   Buy  ...                          TERADYNE INC  295371  0.1465
3  ARKK  2021-02-01   Buy  ...                 BEAM THERAPEUTICS INC   58218  0.0241
4  ARKK  2021-02-01  Sell  ...         REGENERON PHARMACEUTICALS INC    5130  0.0111

[5 rows x 8 columns]
   ARKG  2021-02-03  Sell  ...  TWIST BIOSCIENCE CORP   97415  0.1615
0  ARKK  2021-02-03   Buy  ...  SPOTIFY TECHNOLOGY SA  385932  0.4980
1  ARKK  2021-02-03   Buy  ...             PACCAR INC  318474  0.1231
2  ARKK  2021-02-03   Buy  ...  FATE THERAPEUTICS INC   98059  0.0394
3  ARKK  2021-02-03   Buy  ...           TERADYNE INC  104809  0.0524
4  ARKK  2021-02-03  Sell  ...               ROKU INC   53551  0.0924

[5 rows x 8 columns]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。