Openpyxl Unicode 值
Openpyxl Unicode Values
我正在使用 openpyxl
从 Excel 电子表格中读取单元格值。其中一个单元格的值由换行符分隔。我想使用换行符作为分隔符来拆分字符串。然而,似乎 openpyxl
正在将回车 return 序列化为非标准格式。看下面的例子。
代码
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
有这样的行为的原因吗?我做错了什么吗?
看起来 openpyxl 或 Excel 正在以这种方式编码运输 returns (\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']
如some support issue from 2015 (see Google cache entry to avoid login)所述,已在openpyxl的官方Bitbucket项目中发布,这是由Excel完成的,似乎不受openpyxl的控制。
为了解决这个问题,encoding/decoding 有一些 实用函数。
>> openpyxl.utils.escape.unescape(tests_str))
u'Test1\r\nTest2\r\nTest3\r'
Link 到文档:https://openpyxl.readthedocs.io/en/stable/api/openpyxl.utils.escape.html
我正在使用 openpyxl
从 Excel 电子表格中读取单元格值。其中一个单元格的值由换行符分隔。我想使用换行符作为分隔符来拆分字符串。然而,似乎 openpyxl
正在将回车 return 序列化为非标准格式。看下面的例子。
代码
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
有这样的行为的原因吗?我做错了什么吗?
看起来 openpyxl 或 Excel 正在以这种方式编码运输 returns (\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']
如some support issue from 2015 (see Google cache entry to avoid login)所述,已在openpyxl的官方Bitbucket项目中发布,这是由Excel完成的,似乎不受openpyxl的控制。
为了解决这个问题,encoding/decoding 有一些 实用函数。
>> openpyxl.utils.escape.unescape(tests_str))
u'Test1\r\nTest2\r\nTest3\r'
Link 到文档:https://openpyxl.readthedocs.io/en/stable/api/openpyxl.utils.escape.html