首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用olefile方法打开目录中的excel文件

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

Stack Overflow用户
提问于 2021-03-02 03:38:32
回答 1查看 145关注 0票数 1

日安,

我正在尝试打开多个excel文件(xls),并将它们放入一个数据框中。我正在使用.glob()访问这里的文件:

代码语言:javascript
运行
复制
all_files = glob.glob('D:\Anaconda Hub\ARK analysis\Ark analysis\data\year2021\\february\\**.xls')

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

代码语言:javascript
运行
复制
['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方法。下面是我的代码:

代码语言:javascript
运行
复制
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())

然而,我得到了这个错误:

代码语言:javascript
运行
复制
TypeError: expected str, bytes or os.PathLike object, not list

我不明白为什么我会得到这个错误。我正在迭代列表以选择一个字符串,并通过其余步骤传递它……如能正确地做到这一点并在单个数据框中输出excel文件,我们将不胜感激。提前感谢

EN

回答 1

Stack Overflow用户

发布于 2021-03-02 04:07:40

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

在这种情况下,错误消息TypeError: expected str, bytes or os.PathLike object, not list提供了相当丰富的信息。您的代码包含一行:with open(all_files,'r') as file:,其中您已经将整个列表传递给了open()

尝试以下代码:

代码语言:javascript
运行
复制
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())

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

代码语言:javascript
运行
复制
   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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66428556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档