2015-04-30 2 views
3

Я использую openpyxl для чтения значений ячеек из таблицы Excel. Одна из ячеек имеет значения, разделенные символом новой строки. Я хочу разбить строку, используя символ новой строки, в качестве разделителя. Однако кажется, что openpyxl сериализует возврат каретки в нестандартный формат. Посмотрите пример ниже.Значения Unicode Openpyxl

Код

import openpyxl 

# Open the worksheet 
wb = openpyxl.load_workbook(wb_path) 
ws = wb.get_sheet_by_name("testing") 

# Get the string value 
tests_str = ws.cell(row = row, column = column).value 

# Split text on newlines and add them to the list 
tests = [] 
for test in tests_str.splitlines(): 
    tests.append(test) 

Выход

>>> tests_str 
u'Test1_x000D_\nTest2_x000D_\nTest3_x000D_' 
>>> tests 
[u'Test1_x000D_', u'Test2_x000D_', u'Test3_x000D_'] 

openpyxl, кажется, сериализации \r характер в _x000D_ поэтому splitlines() не снимая его в качестве символа новой строки. Есть ли причина, почему openpyxl ведет себя так? Я делаю что-то неправильно?

ответ

1

Похоже, что либо openpyxl, либо Excel кодирует возврат каретки (\r, ASCII 0Dh) таким образом. Вы можете конвертировать их обратно или разделить на них:

>>> s=u'Test1_x000D_\nTest2_x000D_\nTest3_x000D_' 
>>> s.split('_x000D_\n') 
[u'Test1', u'Test2', u'Test3_x000D_']  # This misses the final one. 
>>> s.replace('_x000D_','').splitlines() # Better... 
[u'Test1', u'Test2', u'Test3'] 
+2

Excel делает кодировку, openpyxl сохраняет ее. –

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