【发布时间】:2015-10-26 16:15:01
【问题描述】:
我正在使用openpyxl 库从 Excel 工作表中读取数据。示例单元格可能包含类似[[0, 1, 2, 3], [4, 5, 6, 7]] 的列表、类似5 的整数或类似sample string 的字符串。
整数被正确读取为整数,但字符串和列表都被读取为 unicode:
print "{} is {}".format(data, type(data))
产量
5 is <type 'int'>
[[0, 1, 2, 3], [4, 5, 6, 7]] is <type 'unicode'>
sample string is <type 'unicode'>
我想防止列表被读取为 unicode,或者找到将 unicode 适当地转换为列表和字符串的修复程序。
以下是解决此问题的不成功尝试:
def remove_unicode(data):
if isinstance(data, unicode):
return data.encode('utf-8')
当然,这样做的问题是列表作为字符串返回。如果返回的字符串中的第一个和最后一个字符是[ 和],我可以通过将类型更改为列表来改进这一点,但这似乎很笨拙。我怀疑更好的解决方案是首先防止我的列表和字符串被读取为 unicode。
【问题讨论】:
-
为了清楚起见,听起来您认为列表是基本的 Excel 类型,而 Python 将它们误解为字符串。对吗?
-
@DSM 我不希望列表是基本的 Excel 类型。我所期待的是,当导入 Python 环境时,openpyxl 会将包含
[[0, 1, 2, 3], [4, 5, 6, 7]]之类的单元格解释为列表。相反,它似乎将其解释为 unicode。我的假设可能是不正确的,并且几乎肯定会导致我遇到的问题。 -
根据规范,单元格的数据类型可以是数字、布尔值、字符串、公式或错误。从理论上讲,它甚至可以是一个日期时间。但是,没有像数组这样的复合数据类型。你要什么就像说 x = '[1, 2, 3]' 并期望 Python 将 x 视为一个列表。它没有,而且有很好的理由。
标签: python excel list unicode openpyxl