Python -使用tablib导入 Excel (xls,xlsx)文件

2024-04-25 18:23:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道如何将Excel文件导入到Python脚本中。我只学了几天Python,所以我想这是我明显缺少的东西。我正在使用Python 3和tablib模块。从tablib站点的示例中,我已经研究了如何以xls格式保存文件

    def saveXLS(self, name, data):        
        # Form the dataset with the accompanying headers
        dataTab =  tablib.Dataset()
        dataTab.headers = data[0][:]

        for i in range(1,len(data)):
            dataTab.append(data[i][:])

        with open(self.saveDir + name + ".xls", 'wb') as f:
            f.write(dataTab.xls)     

(我知道这个循环是可怕的和非Python,但重要的是我现在得到的结果,因为它的工作)。现在,我打开Excel工作簿,并将其保存为文本文件(我应该指出,我的所有数据都是制表符分隔的,由字符串组成,甚至包括数字)。

我这样打开它

    def loadTxt(self,name, fileType, data):
            if( fileType == "txt"):            
                with open(self.currentWorkingDir + "\\" + name + ".txt",'r') as f:
                    reader=csv.reader(f,delimiter='\t')
                    for X in reader:
                        data.append(X)

我试图复制tablib网站(http://tablib.readthedocs.org/en/latest/api/)上的“dbf”示例来获取

    def loadXLS(self):
            self.data = tablib.Dataset()
            self.data = open('Data.xlsx').read()
            return self.datav

我得到了一个错误(正如我所料,从我的屁股上拉出来的)

UnicodeDecodeError:“charmap”编解码器无法解码637位置的字节0x8f:字符映射到。

很不幸,我真的不知道该如何解决这个问题,所以任何建议都会非常感激。


Tags: 文件thenameself示例datadefwith
3条回答

您现在可能已经知道了,但是对于下一个人,您需要将Excel文件读取为二进制文件:

my_input_stream = open("my_file.xlsx", "rb")
my_dataset = tablib.import_set(my_input_stream)
dataset[1:5]

它是这样工作的

import tablib
f = open('my_file.xlsx', 'rb')
data = tablib.import_set(f.read(), format='xlsx')
data[0]

目前,表B 0.12.1。

我用它来导入一个用tablib创建的.xlsx数据本,并输出到一个excel文件。

要把它放回tablib:

import tablib

my_dataset = tablib.Dataset()
my_dataset.xlsx = open('input_file.xlsx', 'rb').read()
print(my_dataset)

返回如下内容:

Email                |Id   |Name                       
---------------------|-----|---------

my_name@tablib.com   |0    |My Name          
my_name1@tablib.com  |1    |My Name1               
my_name2@tablib.com  |2    |My Name2          
my_name3@tablib.com  |3    |My Name3

相关问题 更多 >