为什么使用变量而不是使用python中的xlrd打开工作簿的列表无效?

时间:2019-05-10 21:32:14

标签: python xlsx xlrd

我是python的新手,因此感谢您的帮助。在过去的四天里,我一直在从我可以想象的各个角度进行攻击,希望自己能解决这个问题,但是我很沮丧。

我正在尝试从扩展名为.xlsx的特定目录创建文件列表。然后,我想从列表中获取这些文件名并运行一些函数,将发现的文件名传递给该函数,并使用每个文件名对其进行迭代。我尝试了多种方法来执行此操作,但是由于某种原因,我将不接受文件名。

import os
import xlrd

mypath = "some path to files"
fileslist = []

def find_files():
    for file in os.listdir(mypath):
        if file.endswith(".xlsx")
            fileslist.append(file)

def other_function():    
    book = xlrd.open_workbook(fileslist)

我可以打印文件列表,并显示其中已包含正确的信息。我已经在脚本的主要部分以及other_function()区域中完成了此操作。我还尝试过测试在目录中命名具有有效文件名的可变文件列表,比如说“ file1.xlsx”,它可以工作。一旦将其输入到列表中,即使列表中唯一的条目是“ file1.xlsx”,我也会收到以下错误消息

book = xlrd.open_workbook(fileslist)
  File "/Library/Python/2.7/site-packages/xlrd/__init__.py", line 110, in open_workbook
    filename = os.path.expanduser(filename)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 254, in expanduser
    if not path.startswith('~'):
AttributeError: 'list' object has no attribute 'startswith'

1 个答案:

答案 0 :(得分:1)

xlrd正在寻找要打开的文件路径。 (文件列表)是1)不是文件路径,而是多个文件路径,以及2)不是字符串,这是您遇到的特定错误。字符串(是Python对象)具有方法.startswith,该方法允许xlrd检查文件路径的第一部分(您应该给open_workbook)是否为{{ 1}}。 xlrd可能这样做是因为这会影响它在哪里寻找文件。

~本质上是试图双击您发送的文件路径,(基本上)是试图同时单击列表中的所有文件,如果可以的话,这可能是可能的。每只都有X只不同的计算机鼠标,但是通常不可能以通常的方式构建计算机。

如果要为您拥有的不同工作簿制作字典,但使用xlrd打开,则可以使用以下方法:

xlrd.open_workbook

,然后使用以下命令访问不同的文件:

xlrd_wbs = dict() for my_file in filelist: xlrd_wbs[my_file] = xlrd.open_workbook(my_file)

我将在这里使用字典,因为它使您可以更可靠地访问想要的文件,如果您只想要列表,则可以执行以下操作:

xlrd_wbs[whatever_file_path_you_used]