Map对象在Python 3中没有len()

时间:2014-02-05 09:10:16

标签: python python-3.x

我有这个由其他人编写的Python工具来闪存某个微控制器,但是他已经为Python 2.6编写了这个工具,而我正在使用Python 3.3。

所以,我把大部分内容移植了,但这条线路出了问题:

data = map(lambda c: ord(c), file(args[0], 'rb').read()) 

Python 3中不存在file函数,必须将其替换为open。但是,将data作为参数的函数会导致异常:“TypeError:类型'map'的对象没有len()”

但是到目前为止我在文档中看到的是map必须将可迭代类型连接到一个大的迭代,我错过了什么?

如何将其移植到Python 3?

1 个答案:

答案 0 :(得分:30)

在Python 3中,map返回一个迭代器。如果函数需要列表,则必须显式转换迭代器,如下所示:

data = list(map(...))

我们可以这样做,就像这样

with open(args[0], "rb") as input_file:
    data = list(input_file.read())

rb指的是以二进制模式读取。所以,它实际上返回字节。所以,我们只需要将它们转换为列表。

引自open's docs

  

Python区分二进制和文本I / O.打开的文件   二进制模式(包括mode参数中的'b')将内容返回为   没有任何解码的字节对象。