在Python中打开和读取Excel .xlsx文件

7
我正在尝试使用Python打开一个excel .xlsx文件,但是找不到方法来实现,我试过使用pandas,但它想要使用一个叫做NumPy的库,我尝试安装NumPy但仍然找不到它。我还尝试了使用xlrd库,但是出现了以下回溯信息:
Traceback (most recent call last):
  File "C:\test.py", line 3, in <module>
    book = open_workbook('test.xlsx')
  File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 370, in open_workbook
    biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)
  File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1323, in getbof
    raise XLRDError('Expected BOF record; found 0x%04x' % opcode)
XLRDError: Expected BOF record; found 0x4b50

我猜这是因为XLRD无法读取.xlsx文件?有人有什么想法吗?编辑:
import csv
with open('test.csv', 'rb') as csvfile:
    data = csv.reader(csvfile, delimiter=',')
    for row in data:
        print "------------------"
        print row
        print "------------------"
        for cell in row:
            print cell

6
xlrd 支持 xlsx,尝试升级:pip install xlrd --upgrade - alecxe
@alecxe 谢谢您的回复,我正在尝试那个方法。我也在考虑导出到 CSV 的路线。 - Ryflex
你最好为新问题创建一个单独的线程,我个人认为。 - alecxe
如果您需要多次执行此操作,最好花时间使用 numpypandas 进行设置。使用 pandas 读取大多数 Excel 文件只需一行代码,然后再进行任何必要的数据处理。 - Phillip Cloud
3个回答

12

也许你可以将你的 .xlsx 文件导出为 .csv 文件呢?

然后你可以尝试:

import csv
with open('file.csv','rb') as file:
    contents = csv.reader(file)
    [x for x in contents]

这可能会有用: http://docs.python.org/2/library/csv.html#csv.reader

希望能对你有所帮助!

编辑:

如果你想要找到一个特定的单元格,比如 F13,你可以创建一个类似矩阵的嵌套列表,然后引用每个元素:

import csv
with open('file.csv','rb') as file:
    contents = csv.reader(file)
    matrix = list()
    for row in contents:
        matrix.append(row)

然后使用matrix[5][12]来访问F13。

P.S.:我没有测试过。如果“row”是一个包含每个单元格的元素的列表,您需要将所有行附加到矩阵中,因此第一个索引是行号,第二个是列号。


是的,我在同时尝试另一种方法时也走了这条路线,问题是我很难在每行/单元格中找到所需的数据。我已经编辑了我的原始帖子,加入了我之前制作的内容。 - Ryflex
如果你想访问矩阵中的一个特定单元格,可以尝试我的上面的编辑。 - Thales MG

2

看起来你正在使用Linux发行版。我也遇到了同样的问题,但这只发生在“xlrd”库中,而不是“xlwt”库中。我所做的并不是解决此问题的正确方法,但它可以暂时使事情正常工作,希望很快能有答案;我在Windows上安装了“xlrd”,然后将文件夹复制到Linux中我的Python代码所在的目录中,这样就可以使用了。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接