Python – 用于tablib导入Excel(xls,xlsx)文件

我无法弄清楚如何将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的工作簿,并将其保存为文本文件(我应该指出,我所有的数据是制表符分隔,由string,即使是数字)。

我像这样打开它

  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:字符映射到。

我真的不知道如何解决这个不幸的,所以任何意见将非常感激。

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

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

我发现你的dbf示例扩展有两个问题。 (这让我走上了自己的榜样,谢谢!)

  1. 该文件应该以二进制模式打开 。
  2. 数据应分配到关联的Dataset表示中。

 def loadXLS(self): self.data = tablib.Dataset() self.data.xls = open('Data.xls', 'rb').read() return self.data 

我一直无法获得.xlsx工作,并怀疑它需要一个专门的input过程。 我将查看django_import_export XLSX数据集创build 。

虽然以前的答案可能是正确的,恐怕他们现在由于tablib库的改进/变化已经过时了,下面的代码为我工作,希望这有助于下一个人: #Importing tablib library import tablib my_dataset = tablib.Dataset() my_dataset.xlsx = open('my_file.xlsx').read() print my_dataset

它是这样工作的

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