Этот ответ на самом деле представляет собой несколько мягких комментариев к принятому ответу, но они нуждаются в лучшем форматировании, чем обеспечивает средство комментариев SO.
(1) Отказ от горизонтальной полосы прокрутки SO повышает вероятность того, что люди будут читать вашкод.Попробуйте обернуть строки, например:
toprint = u"".join([
u"formatting of the data im writing. "
u"important stuff is to the right -> ",
unicode(sheettwo.cell(z,y).value),
u" more formatting! ",
unicode(sheettwo.cell(z,x).value),
u" and done\n"
])
out.write(toprint.encode('UTF-8'))
(2) Предположительно, вы используете unicode()
для преобразования чисел с плавающей запятой и целых в unicode;это ничего не делает для значений, которые уже являются Unicode.Имейте в виду, что unicode()
, как и str
(), дает вам только 12 цифр точности для чисел с плавающей запятой:
>>> unicode(123456.78901234567)
u'123456.789012'
Если это беспокоит, вы можете попробовать что-то вроде этого:
>>> def full_precision(x):
>>> ... return unicode(repr(x) if isinstance(x, float) else x)
>>> ...
>>> full_precision(u'\u0400')
u'\u0400'
>>> full_precision(1234)
u'1234'
>>> full_precision(123456.78901234567)
u'123456.78901234567'
(3) xlrd
строит Cell
объектов на лету, когда это требуется.
sheettwo.cell(z,y).value # slower
sheettwo.cell_value(z,y) # faster