ImportError: 无法导入名称 open_workbook

1 投票
1 回答
4863 浏览
提问于 2025-04-17 13:48

我在使用xlrd的时候遇到了一些问题。我用的是Fedora 17。

我运行了

python run.py

然后出现了这个错误

ImportError: cannot import name open_workbook

我在网上搜索了很久,但一直找不到解决办法,感觉有点沮丧。

根据我在网上找到的信息,我觉得可能是Python在找xlrd的时候,遇到了一个冲突的文件或文件夹。如果真是这样,我猜这和我安装xlrd的方式有关。首先,我记得我下载了一个rpm文件(我找不到当时下载的具体网址)。下载后,我的文件运行得很好,但后来我觉得需要从更可信的来源安装xlrd,于是我去了http://www.python-excel.org/,通过那里的链接下载了它。安装没问题,但从那时起我就开始收到导入错误。

如果可以的话,我想完全卸载xlrd,然后重新开始。不知道这样是否有帮助,但如果有人能给我指个方向,那就太好了。

这是我的代码:

from xlrd import open_workbook

wb = open_work('week 1/AFROTC SP13 Eagles Sqaudron Weekly Attendance.xls')

LLab = {}
TuesPT = {}
ThursFriPT = {}

for s in wb.sheets():
    if s.name == "LLab":
        for row in range(s.nrows):
            values = []
            for col in range(s.ncols):
                values.append(s.cell(row,col).value)
            if values[0] != "end":
                if values[1] == "0" or values[1] == "1":
                    LLab[values[0]]=int(values[1])

    elif s.name == "TuesPT":
        for row in range(s.nrows):
            values = []
            for col in range(s.ncols):
                values.append(s.cell(row,col).value)
            if values[0] != "end":
                if values[1] == "0" or values[1] == "1":
                    TuesPT[values[0]]=int(values[1])

    elif s.name == "ThursFriPT":
        for row in range(s.nrows):
            values = []
            for col in range(s.ncols):
                values.append(s.cell(row,col).value)
            if values[0] != "end":
                if values[1] == "0" or values[1] == "1":
                    ThursFriPT[values[0]]=int(values[1])

print "LLab"
for key in LLab:
    print key,
    print LLab[key]

print
print

print "TuesPT"
for key in TuesPT:
    print key,
    print TuesPT[key]

print
print

print "ThursFriPT"
for key in ThursFriPT:
    print key,
    print ThursFriPT[key]

1 个回答

2

根据我们上面评论中的讨论,最终的原因是目录里有一个叫做 copy 的文件。这导致了问题,因为 xlrd 这个包里的 formula 模块试图去 import copy,但它不是在导入系统自带的 copy,而是导入了我们自己目录里那个叫 copy 的文件,这就引发了错误。

撰写回答