Python 2.x到3.x转换的代码在IO.StringIO转换中失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 2.x到3.x转换的代码在IO.StringIO转换中失败相关的知识,希望对你有一定的参考价值。

python 2.x代码

sdata = StringIO.StringIO(c.data)

python 3.x代码

sdata = io.StringIO(c.data)

完整的代码

def downloadCSV(c, d):
    filename = c.getFilename(d)
    reqstr = c.getReqStr(d)

    print(("Downloading %s ..." % (filename)))
    if c.getResponse(reqstr) == -1:
        return -1
    sdata = io.StringIO(c.data)
    z = zipfile.ZipFile(sdata)

错误:

Traceback (most recent call last):
  File "xxx.py", line 166, in <module>
    main(sys.argv[1:])
  File "xxxx.py", line 158, in main
    getMonth(c, args[1], args[2])
  File "xxxx.py", line 133, in getMonth
    if downloadCSV(c, d) > -1:
  File "xxxx.py", line 73, in downloadCSV
    sdata = io.StringIO(c.data)
TypeError: initial_value must be str or None, not bytes

右导入是为3.x python版本完成的,sdata的转换应该在这里自动发生?为什么会出现上述错误,以及在python3.x中纠正此错误的方法是什么。尝试在这个论坛发布的其他答案,但在这种情况下似乎没有任何工作。

答案

Python 3现在改变了strbytes

您的请求返回了二进制数据,因此为了能够将其存储在io对象中,您必须创建一个BytesIO对象而不是StringIO对象。所以:

sdata = io.BytesIO(c.data) 

请注意,代码仍然与Python 2兼容。

以上是关于Python 2.x到3.x转换的代码在IO.StringIO转换中失败的主要内容,如果未能解决你的问题,请参考以下文章

记录:Ubuntu下升级Python从2.x到3.x

如何为 PyPI 组织 Python 模块以支持 2.x 和 3.x

python input 2.x 与 3.x区别格式化输出

当另外两个 2.X 也在 MacO 上时,如何将第三方库安装到 Python 3.X? [复制]

Python2.x 和 3.x 的区别

如何在 Python 3 中写上标? [复制]