2013-08-07 3 views
-1

1.5 месяца с Python. Я использую Python 3.3.2 с WinPython http://code.google.com/p/winpython/ и порт xlwt на Python 3 отсюда https://github.com/hansrwl/xlwt/tree/py3 Это dict со значениями в виде списков. Он правильно записывает файл xls со следующей функцией.Написать словарь списков в xls в Python

sampleData = {'Books': ['Book_A', 'Book_B', 'Book_C'], 
       'Author': ['Author_A', 'Author_B', 'Author_C'], 
       'Price': ['Price_A', 'Price_B', 'Price_C']} 

функция:

def saveDataToNewFile(fileName, sheetName, data): 
    # Creating new workbook 
    wb = xlwt.Workbook() 
    # Creating new worksheet with the name specified 
    ws = wb.add_sheet(sheetName) 
    # Use dictionary keys as first row values(e.g. headers) 
    for colIdx, headerCaption in enumerate(data): 
     ws.write(0, colIdx, headerCaption) 
     # Use dict values as row values for corresponding columns 
     for rowIdx, itemVal in enumerate(data[headerCaption]): 
      ws.write(rowIdx + 1, colIdx, itemVal) 
    wb.save(fileName) 

saveDataToNewFile('sample.xls', 'FirstSaveToXlsSample', sampleData) 

- это правильно сохранить и открыт с MS Excel.

Я имею ту же структуру данных, которая производится с помощью этого цикла:

soup3 = defaultdict(list) 
def init_fields(links_first_lvl): 
    for link in links_first_lvl[1:7]: 
soup3['Дата'].append(BeautifulSoup(urllib.request.urlopen(link).read()).select('.author_data')) 
      soup3['Адрес'].append(link) 
     return soup3 

Вот структура, словарь со списками как значения (я использую pprint для печати в консоли красоты)

PPRINT: 
{'url': [ 'http://www.ros.ru/article.php?chapter=1&id=20132503', 
      'http://www.ros.ru/article.php?chapter=1&id=20132411'], 
'date': [[<div class="author_data"><b>Марта Моисеева 
</b> № 30 (973) от 24.07.2013 
<span class="rubr"> ВЛАСТЬ 
</span></div>], 
      [<div class="author_data"><b>Ольга Космынина 
</b> № 29 (972) от 17.07.2013 
<span class="rubr"> ВЛАСТЬ 
</span></div>]] 

saveDataToNewFile('sample2.xls', 'FirstSaveToXlsSample', soup3) 

проблема: если я пытаюсь сохранить XLS я получаю сообщение об ошибке:

.....

if isinstance(data, basestring): 
NameError: global name 'basestring' is not defined 

Edit: это полный стек ошибок в консоли PyCharm

Traceback (most recent call last): 
    File "F:/Python/NLTK packages/parse_html_py3.3.2.py", line 91, in <module> 
    saveDataToNewFile('sample2.xls', 'FirstSaveToXlsSample', soup3) 
    File "F:/Python/NLTK packages/parse_html_py3.3.2.py", line 87, in saveDataToNewFile 
    ws.write(rowIdx + 1, colIdx, itemVal) 
    File "F:\WinPython-32bit-3.3.2.0\python-3.3.2\lib\site-packages\xlwt\Worksheet.py", line 1032, in write 
    self.row(r).write(c, label, style) 
    File "F:\WinPython-32bit-3.3.2.0\python-3.3.2\lib\site-packages\xlwt\Row.py", line 259, in write 
    self.__rich_text_helper(col, label, style, style_index) 
    File "F:\WinPython-32bit-3.3.2.0\python-3.3.2\lib\site-packages\xlwt\Row.py", line 276, in __rich_text_helper 
    if isinstance(data, basestring): 
NameError: global name 'basestring' is not defined 

Я не знаю, почему, он должен работать, потому что структура такая же.

+0

Где эта ошибка? Это в библиотеке xls? – Nadh

+0

добавлено для редактирования в сообщении выше –

+2

Похоже, вы используете что-то только python2. 'basestring' не существует в python3. – Bakuriu

ответ

0

Используемая вами библиотека написана для работы только с python 2.x. Загрузите последнюю версию python 2.x от here и повторите попытку.

0

Значительно ниже накладных расходов с LibreOffice. Откройте папку установки LibreOffice и просмотрите ссылки UNO из всех текущих примеров. Сохраните как XLS. Готово.

0

В комментарии предполагают, проблема вы используете код, который до сих пор написанный на Python 2, однако, до перехода на Python 2, как следует nosklo, убедитесь, что вы установили xlwt из Python 3 филиала. После того, как вы клонировали репозиторий xlwt, не забыли ли вы выполнить

git checkout -b py3 origin/py3 

перед тем вы выполнили установку?

Если вы помните, и вы по-прежнему получаете ошибку basestring, то ветка py3 еще не завершена, и вам нужно будет перейти на Python 2, чтобы запустить код в главной ветке.

0

Вы можете попробовать изменить «basestring» на «ул»

0
if isinstance(data, basestring): 
    NameError: global name 'basestring' is not defined 

Вероятно, объект не имеет такого атрибута, и ваш тест не пройден, так как он просто проверить, если тип объекта является экземпляром или нет, и это подразумевает, что ваш атрибут или объект уже существует.

Я рекомендую вам провести предварительное испытание, чтобы проверить, если атрибут или объект существует, например, как hasattr(), или если вы считаете, использовать себя вы можете прочитать себя.__dict__, чтобы найти существующие атрибуты.

Смежные вопросы