Python - 用于Tablib导入Excel(xls,xlsx)文件

时间:2014-09-15 14:28:47

标签: python excel import

我无法弄清楚如何将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)     

(我知道循环是可怕的而且不是Pythonic,但重要的是我现在得到结果,因为它是为了工作)。目前,我打开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:字符映射到。

我真的不知道如何弄清楚这一点,所以任何建议都会非常感激。

5 个答案:

答案 0 :(得分:7)

你现在可能已经想到了,但对于下一个人,你需要将Excel文件读作二进制文件:

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

答案 1 :(得分:3)

目前,tablib 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

答案 2 :(得分:1)

虽然当时早期的答案可能是正确的,但我担心它们现在已经过时了,因为tablib库的改进/更改,以下代码对我有用,并希望这有助于下一个人: #Importing tablib library import tablib my_dataset = tablib.Dataset() my_dataset.xlsx = open('my_file.xlsx').read() print my_dataset

答案 3 :(得分:0)

我发现您的dbf示例扩展存在两个问题。 (这让我开始自己的工作示例。谢谢!)

  1. 该文件应为opened in binary mode
  2. 应将数据分配到关联的Dataset表示。
  3. def loadXLS(self):
      self.data = tablib.Dataset()
      self.data.xls = open('Data.xls', 'rb').read()
      return self.data
    

    我无法让.xlsx工作,并怀疑它需要专门的输入过程。我将调查django_import_export XLSX dataset creation

答案 4 :(得分:0)

它像这样工作

usaAddress