2014-09-15 2 views
2

У меня возникли проблемы с тем, как импортировать файлы Excel в мой сценарий Python. Я всего несколько дней на Python, поэтому я предполагаю, что это очень очевидно, что я пропал без вести. Я использую Python 3 и модуль tablib. Из примеров на сайте tablib, я работал, как сохранять файлы в формате XLSPython - использовать для tablib для импорта файлов Excel (xls, xlsx)

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)  

(я знаю, что петля ужасна и непитоновский, но это важно, я получаю результаты на данный момент, как это для работы). На данный момент я открываю книгу 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) 

Я попытался скопировать пример "DBF" на сайте tablib (http://tablib.readthedocs.org/en/latest/api/), чтобы получить

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

И я получаю ошибку (как я ожидал, как я вытащил его из своей задницы)

UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x8f в позиции 637: символьные карты.

Я действительно не знаю, как это понять, к сожалению, поэтому любой совет будет действительно оценен.

ответ

6

Вы, наверное, понял это сейчас, но для следующего человека, вам нужно прочитать файл Excel в двоичном виде:

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

пытаюсь это, но я получаю 'UnicodeDecodeError: кодек 'UTF-8' не может декодировать байт 0x8e в позиции 16: недействительный стартовый байт' .. мышление python версия? Am on python3.5 – lukik

+0

У меня есть TypeError («ожидаемая строка или буфер») при попытке выше. Исправлено с помощью 'my_input_stream = open (" my_file.xlsx "," rb "). Read()'. Также набор данных индексируется с нуля, поэтому, чтобы увидеть первые пять строк данных, используйте 'dataset [0: 4]'. – isedwards

0

Я вижу две проблемы с dbf примера расширения. (Что привело меня на путь получения моего собственного примера работы. Спасибо!)

  1. Файл должен быть opened in binary mode.
  2. Данные должны быть назначены в соответствующее сообщение Dataset.

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

Я не смог получить .xlsx работать и подозреваю, что это требует специализированного процесса ввода. Я буду смотреть в django_import_exportXLSX dataset creation.

0

В то время как более ранние ответы могут быть правильными в то время, я боюсь, что они устарели из-за улучшения/изменения в библиотеке tablib, вот код, который работал для меня, и надеюсь, что это помогает следующему человеку: #Importing tablib library import tablib my_dataset = tablib.Dataset() my_dataset.xlsx = open('my_file.xlsx').read() print my_dataset

0

Он работает как этот

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

В настоящее время, tablib 0.12.1.

Я использую это для импорта базы данных .xlsx, созданной с помощью tablib, и вывода в файл excel.

Чтобы получить его обратно в tablib:

import tablib 

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

и возвращает что-то вроде этого:

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

[email protected] |0 |My Name   
[email protected] |1 |My Name1    
[email protected] |2 |My Name2   
[email protected] |3 |My Name3 
Смежные вопросы