为什么openpyxl将列表读作unicode?

2024-04-24 17:06:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用openpyxl库从Excel表读取数据。示例单元格可能包含一个列表,如[[0, 1, 2, 3], [4, 5, 6, 7]],整数如5,或字符串{}。在

整数正确地读取为整数,但字符串和列表都以unicode格式读取:

print "{} is {}".format(data, type(data))

收益率

^{pr2}$

我想防止列表被读取为unicode,或者找到一个适当的方法将unicode转换为列表和字符串。在

以下是修复此问题的失败尝试:

def remove_unicode(data):
    if isinstance(data, unicode):
    return data.encode('utf-8')

当然,这样做的问题是列表作为字符串返回。如果返回字符串中的第一个和最后一个字符是[],那么我可以通过将类型更改为list来改进这一点,但这看起来很笨拙。我怀疑一个更好的解决方案是首先防止我的列表和字符串被读取为unicode。在


Tags: 字符串format示例列表datais格式type
1条回答
网友
1楼 · 发布于 2024-04-24 17:06:47

A sample cell might contains a list like [[0, 1, 2, 3], [4, 5, 6, 7]]

它不能包含这样的列表,因为列表不是Excel数据类型。您所拥有的只是一个字符串,openpyxl正确地将其解释为一个字符串,而不是试图猜测您是否希望它被解释为一个以某种方式编码的对象。(见禅宗:“面对模糊,拒绝猜测的诱惑。”)

如果要将类似Python整数列表的字符串表示形式的内容转换为列表,可以使用^{}

>>> sheet
<Worksheet "Sheet1">
>>> sheet.cell("A1").value
'[[1,2,3,4],[5,6,7,8]]'
>>> type(_)
<class 'str'>
>>> import ast
>>> ast.literal_eval(sheet.cell("A1").value)
[[1, 2, 3, 4], [5, 6, 7, 8]]
>>> type(_)
<class 'list'>

或者(在本例中,无论如何)json.loads。注意,我得到str作为数据类型,而不是{},因为我使用的是python3。在

相关问题 更多 >