我是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'
答案 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]