use*_*624 25 python python-3.x
我有这个由其他人编写的Python工具来闪存某个微控制器,但是他已经为Python 2.6编写了这个工具,而我正在使用Python 3.3.
所以,大多数我已经移植了,但是这条线路出了问题:
data = map(lambda c: ord(c), file(args[0], 'rb').read())
Run Code Online (Sandbox Code Playgroud)
该file功能在Python 3中不存在,必须替换为open.但是,data作为参数获取的函数会导致异常:"TypeError:'map'类型的对象没有len()".
但是到目前为止我在文档中看到的是,map必须将可迭代类型连接到一个大的迭代,我错过了什么?
我需要做什么才能将其移植到Python 3?
the*_*eye 33
在Python 3中,map返回一个迭代器.如果函数需要列表,则必须显式转换迭代器,如下所示:
data = list(map(...))
Run Code Online (Sandbox Code Playgroud)
我们可以简单地这样做,就像这样
with open(args[0], "rb") as input_file:
data = list(input_file.read())
Run Code Online (Sandbox Code Playgroud)
rb指的是以二进制模式读取.所以,它实际上返回字节.所以,我们只需要将它们转换为列表.
从open文档中引用,
Python区分二进制和文本I/O. 以二进制模式打开的文件(包括mode参数中的'b')将内容作为字节对象返回,而不进行任何解码.
| 归档时间: |
|
| 查看次数: |
22915 次 |
| 最近记录: |