Потихоньку осваиваем openpyxl. Пока запнулся на следующей проблеме (которая, строго говоря, прямо к openpyxl) не относится.
Итак, имеем код:
>>> from openpyxl import load_workbook
>>> w = load_workbook(filename='base.xlsm', use_iterators=True) # Важно! Используем use_iterators, так как файл большой
>>> sh = w.get_active_sheet() # Вследствие использования use_iterators, сейчас sh - это IterableWorksheet
>>> for row in sh.iter_rows(range_string='A1:C4'):
>>> for cell in row:
>>> print '{0}{1}) {2}'.format(cell.column, cell.row, cell.internal_value)
В результате получаем ошибку:
Traceback (most recent call last):
File "", line 1, in
File "chsql.py", line 71, in make_sh
print '{0}{1}) {2}'.format(cell.column, cell.row, cell.internal_value)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
Эта ошибка возникает, когда программа натыкается в ячейке на русский текст, то есть на кириллицу.
Пока имею в активе эти два поста:
1) http://habrahabr.ru/post/117236/
2) http://shum-beliy.livejournal.com/733.ht ml
Рассчитываю, что второй пост мне поможет решить проблему, как и вообще навести в голове порядок с кодировками...
P.S. Есть еще эти ссылки:
3) http://www.linux.org.ru/forum/developmen t/4004465
4) http://www.joelonsoftware.com/articles/U nicode.html
Итак, имеем код:
>>> from openpyxl import load_workbook
>>> w = load_workbook(filename='base.xlsm', use_iterators=True) # Важно! Используем use_iterators, так как файл большой
>>> sh = w.get_active_sheet() # Вследствие использования use_iterators, сейчас sh - это IterableWorksheet
>>> for row in sh.iter_rows(range_string='A1:C4'):
>>> for cell in row:
>>> print '{0}{1}) {2}'.format(cell.column, cell.row, cell.internal_value)
В результате получаем ошибку:
Traceback (most recent call last):
File "
File "chsql.py", line 71, in make_sh
print '{0}{1}) {2}'.format(cell.column, cell.row, cell.internal_value)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
Эта ошибка возникает, когда программа натыкается в ячейке на русский текст, то есть на кириллицу.
Пока имею в активе эти два поста:
1) http://habrahabr.ru/post/117236/
2) http://shum-beliy.livejournal.com/733.ht
Рассчитываю, что второй пост мне поможет решить проблему, как и вообще навести в голове порядок с кодировками...
При попытке открыть существующий файл xlsm выдает ошибку:
>>> import openpyxl
>>> from openpyxl.reader.excel import load_workbook
>>> wb = load_workbook(filename = r'base.xlsm')
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/pymodules/python2.6/openpyxl/r eader/excel.py", line 50, in load_workbook
sheet_names = read_sheets_titles(xml_source = archive.get_from_name(arc_name = ARC_APP))
File "/usr/lib/pymodules/python2.6/openpyxl/r eader/workbook.py", line 65, in read_sheets_titles
size = get_number_of_parts(xml_source)['Workshe ets']
KeyError: 'Worksheets'
Пока я эту ошибку не устранил, но вот, кажется, здесь обсуждается похожая ситуация:
https://bitbucket.org/ericgazoni/openpy xl/issue/22/error-opening-xlsx-file
>>> import openpyxl
>>> from openpyxl.reader.excel import load_workbook
>>> wb = load_workbook(filename = r'base.xlsm')
Traceback (most recent call last):
File "
File "/usr/lib/pymodules/python2.6/openpyxl/r
sheet_names = read_sheets_titles(xml_source = archive.get_from_name(arc_name = ARC_APP))
File "/usr/lib/pymodules/python2.6/openpyxl/r
size = get_number_of_parts(xml_source)['Workshe
KeyError: 'Worksheets'
Пока я эту ошибку не устранил, но вот, кажется, здесь обсуждается похожая ситуация:
https://bitbucket.org/ericgazoni/openpy
Долго не мог понять, почему у меня эта библиотека не устанавливается на Ubuntu по команде:
$ sudo apt-get install python-openpyxl
Моя машина упорно мне сообщала, что:
E: Не удалось найти пакет python-openpyxl
В результате решил эту проблему так:
http://www.ubuntuupdates.org/package/co re/natty/universe/base/python-openpyxl
На этой странице нажал кнопку All arch deb package, и Установщик все сделал за меня.
Начал изучать документацию. Мне показалось, какая-то она сырая. Спотыкаюсь буквально на каждом шагу. Посмотрим, на что способен этот пакет...
P.S. Да, кстати, вот мануал по пакету:
http://packages.python.org/openpyxl/ind ex.html
P.P.S. Хотя вот эти инструкции, кажется, больше помогают в изучении:
https://bitbucket.org/ericgazoni/openpy xl/wiki/Home
P.P.S. Ну я и олух! И на фига я себе версию 1.1.0 загрузил? Вот последняя версия 1.5.8.1:
http://packages.ubuntu.com/quantal/a ll/python-openpyxl/download
$ sudo apt-get install python-openpyxl
Моя машина упорно мне сообщала, что:
E: Не удалось найти пакет python-openpyxl
В результате решил эту проблему так:
http://www.ubuntuupdates.org/package/co
На этой странице нажал кнопку All arch deb package, и Установщик все сделал за меня.
Начал изучать документацию. Мне показалось, какая-то она сырая. Спотыкаюсь буквально на каждом шагу. Посмотрим, на что способен этот пакет...
P.S. Да, кстати, вот мануал по пакету:
http://packages.python.org/openpyxl/ind
P.P.S. Хотя вот эти инструкции, кажется, больше помогают в изучении:
https://bitbucket.org/ericgazoni/openpy
P.P.S. Ну я и олух! И на фига я себе версию 1.1.0 загрузил? Вот последняя версия 1.5.8.1:
http://packages.ubuntu.com/quantal/a
ch
|
Простое и легкое введение в тему классов на VBA:
Introduction To Classes
Рекомендую! Минимум информации, но зато самое необходимое.
Introduction To Classes
Рекомендую! Минимум информации, но зато самое необходимое.
|
|
Еще одна полезная страничка для начинающих линуксоидов (впрочем, для не начинающих - тоже):
Соответствие функций MS Excel и OpenOffice Calc
Соответствие функций MS Excel и OpenOffice Calc
При попытке чтения первой попавшейся мне страницы HTML наткнулся на дурацкую ошибку! Код:
В ответ получаю:
HTMLParser.HTMLParseError: bad end tag: u"", at line ..., column ...
Оказывается, это довольно древний способ обмана браузера, чтобы тот не рассматривал запись в данном месте js-кода как завершения тега script.
Перерыл кучу источников, пока не нашел это обсуждение:
http://www.python-forum.org/pythonf orum/viewtopic.php?f=3&t=14281&start=0
Спасибо Bitbert3, который предложил следующее решение:
Благодаря re.sub все заработало!
import urllib2 url = 'http://www...' page = urllib2.urlopen(url).read() from BeautifulSoup import BeautifulSoup soup = BeautifulSoup(page)
В ответ получаю:
HTMLParser.HTMLParseError: bad end tag: u"", at line ..., column ...
Оказывается, это довольно древний способ обмана браузера, чтобы тот не рассматривал запись в данном месте js-кода как завершения тега script.
Перерыл кучу источников, пока не нашел это обсуждение:
http://www.python-forum.org/pythonf
Спасибо Bitbert3, который предложил следующее решение:
from BeautifulSoup import BeautifulSoup import urllib2 import re url = "http://www.baseball-reference.com/teams/BOS/2009.shtml" page = urllib2.urlopen(url).read() page = re.sub('</scr', '<\/scr', page) soup = BeautifulSoup(page) t = soup.find(id="team_batting")
Благодаря re.sub все заработало!



