社区首页 >问答首页 >Python3错误:带有StringIO的initial_value必须为字符串或无

Python3错误:带有StringIO的initial_value必须为字符串或无
EN

Stack Overflow用户
提问于 2015-06-26 04:33:16
回答 4查看 80.1K关注 0票数 77

在将代码从python2移植到3时,我在读取URL时遇到以下错误

TypeError: initial_value必须是字符串或无,而不是字节。

代码语言:javascript
代码运行次数:0
复制
import urllib
import json
import gzip
from urllib.parse import urlencode
from urllib.request import Request


service_url = 'https://babelfy.io/v1/disambiguate'
text = 'BabelNet is both a multilingual encyclopedic dictionary and a semantic network'
lang = 'EN'
Key  = 'KEY'

    params = {
        'text' : text,
        'key'  : Key,
        'lang' :'EN'

        }

url = service_url + '?' + urllib.urlencode(params)
request = Request(url)
request.add_header('Accept-encoding', 'gzip')
response = urllib.request.urlopen(request)
if response.info().get('Content-Encoding') == 'gzip':
            buf = StringIO(response.read())
            f = gzip.GzipFile(fileobj=buf)
            data = json.loads(f.read())

异常在此行抛出

代码语言:javascript
代码运行次数:0
复制
buf = StringIO(response.read())  

如果我使用python2,它工作得很好。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-26 07:28:52

response.read()返回bytes的一个实例,而StringIO是一个仅用于文本的内存中的流。请改用BytesIO

来自What's new in Python 3.0 - Text Vs. Data Instead Of Unicode Vs. 8-bit

StringIOcStringIO模块消失了。相反,您可以导入io模块,并使用io.StringIOio.BytesIO分别处理文本和数据。

票数 126
EN

Stack Overflow用户

发布于 2015-06-26 07:31:56

这看起来像是另一个python3 bytesstr的问题。您的响应类型为bytes (在Python3中与str中的类型不同)。您需要首先使用response.read().decode('utf-8')将其转换为字符串,然后对其使用StringIO。或者你可能想要像别人说的那样使用BytesIO --但是如果你希望它是str,首选的方法是先decode到一个str中。

票数 25
EN

Stack Overflow用户

发布于 2019-07-08 17:05:28

考虑使用six.StringIO而不是io.StringIO。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31064981

复制
相关文章
python的StringIO
但是有时候不想写到本地,只是要存在电脑内存就好,这样就可以用 StringIO 进行保存:
机器学习和大数据挖掘
2019/07/02
5960
python的io模块
io模块提供了python用于处理各种类型I/O的主要工具,主要有三种类型的I/O:文本I/O,二进制I/O和原始I/O;这些都是通用类型,各种后备存储可使用其中的每一种类型,所以这些类型的具体对象称为文件对象。他通常的术语叫流和文件对象。每个具体流对象都具有各种功能:可以是只读,只写或读写。它可以允许任意的随机访问;向前或向后寻找任何位置或者只允许顺序访问如套接字或管道的情况下。所有的流都会检测提供给它的数据类型,如给二进制流str字符类型的write()的写方法将会引发一个TypeError异常。
狼啸风云
2019/08/31
2.2K0
Python的io模块详解
Python的io模块提供了多个流式处理接口,具体的处理函数实现位于_pyio.py模块中。 在_io.py模块中,提供了唯一的模块方法open(name, mode=None, buffering=None),但是没有read()方法。 1. io模块的类图 IOBase -RawIOBase,无缓存的字节流 -+FileIO,操作系统文件流 -BufferedIOBase,缓存的字节流 -+BytesIO -+BufferedReader -+BufferedWriter -+BufferedRandom -+BufferedRWPair -TextIOBase,编码相关的文本流 -+StringIO,文本的内存流 -+TextIOWrapper
py3study
2020/01/09
1.6K0
fscanf读取一行字符串-C中带有fscanf的无延迟循环
  C中带有fscanf的无延迟循环,c,C,您好,我在使用fscanf读取二进制文件时遇到问题,值没有被存储,而循环是无限的这是我的密码int main(){FILE *reads=fopen("E1.bin", "rb");;int temp=0,temp1=0,temp2=0;if (reads==NULL) {printf("Error");return 0;}else {while((fscanf(reads,"%d %d %d", temp, temp1, temp2))!= EOF
宜轩
2022/12/26
1.7K0
python模块—StringIO an
在平时开发过程中,有些时候我们可能不需要写在文件中,我们可以直接通过StringIO模块直接写入到系统内存中,如果不用了,可以直接清除就可以了。StringIO主要是用来在内存中写入字符串的,及字符串的缓存。
py3study
2020/01/15
7310
Istio 的未来:无 Sidecar 和带有 Ambient Mesh 的 Sidecar
Istio 的 Ambient Mesh(环境网格) 为 Istio 服务网格引入了一个新的无 Sidecar(Sidecar-Less)数据平面选项,其目的是简化应用程序的启动,增加增量采用,并降低 Istio 网格用户的基础设施成本。
深度学习与Python
2023/08/08
5430
Istio 的未来:无 Sidecar 和带有 Ambient Mesh 的 Sidecar
为什么网站中的CSS或JS会带有v或version参数
在查看网页源码的时候经常会发现带有类似 ?v=13566 或者 ?version=15678 的 CSS 和 JS 文件。如下所示: <script src="w3h5.js?version=1568
德顺
2019/11/13
4.3K0
为什么网站中的CSS或JS会带有v或version参数
python3–内置模块Ⅱ
hashlib Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。 摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。 以常见的摘要算法MD5为例,计算出一个字符串的MD5值: import hashlib md5 = hashlib.md5() src = "how to use python hashlib -zhdya" md5.update(src.encode("utf-8")) print(m
老七Linux
2018/05/09
1.1K0
带有通配符的字符串匹配算法-C/C++
日前某君给我出了这样一道题目:两个字符串,一个是普通字符串,另一个含有*和?通配符,*代表零个到多个任意字符,?代表一个任意字符,通配符可能多次出现。写一个算法,比较两个字符串是否相等。 我花了四个小
一见
2018/08/07
2.2K0
json.loads()的字符串中为单引号引发的错误
Traceback (most recent call last): File "G:/FastWorkStateServer/logs/redis_fabu.py", line 20, in <module> print(json.loads(str2)) File "D:\python3.6.5\lib\json\__init__.py", line 354, in loads return _default_decoder.decode(s) File "D:\python3.6.5\lib\json\decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "D:\python3.6.5\lib\json\decoder.py", line 355, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
用户1558882
2018/10/10
3.3K0
Python中的StringIO与cSt
StringIO与cStringIO类似,都是向内存中写入文件,其操作与文件操作类似(不敢说相同,但是至少读写是一样的)。一StringIO为例如下:
py3study
2020/01/07
8890
Python的StringIO模块和cS
    f = StringIO()      # ready for writing
py3study
2020/01/08
4230
如何使用Frelatage对Python代码进行模糊测试
Frelatage是一款基于覆盖率的Python模糊测试工具,在该工具的帮助下,广大研究人员可以轻松对Python代码进行模糊测试。
FB客服
2022/06/08
1.8K0
如何使用Frelatage对Python代码进行模糊测试
Python文件读写、StringIO和BytesIO
很多时候,数据读写不一定是文件,也可以在内存中读写。StringIO就是在内存中读写str。
Python学习者
2023/05/24
3250
python3使用gzip压缩与解压缩
本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/python-gzip/
羽翰尘
2019/11/20
8.9K0
视图必须派生自 WebViewPage 或 WebViewPage<TModel>
后端汇总:http://www.cnblogs.com/dunitian/p/4523006.html#efmvc 后来发现原来吧web.config给删了 这就简单了,复制其他项目的web.conf
逸鹏
2018/04/10
8710
视图必须派生自 WebViewPage 或 WebViewPage<TModel>
必须为元素类型 “mapper” 声明属性 “namespace” 或The content of element type “mapper” must match “EMPTY”
只需把<!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Config 3.0//EN” “http://mybatis.org/dtd/mybatis-3-config.dtd”>
全栈程序员站长
2022/06/30
6640
Python语法必备篇——Python字符串 学习
字符串的意思跟字面意思很像,就是“一串字符”,字符串是 Python 中最常用的数据类型。
呆呆敲代码的小Y
2021/12/08
6500
Python语法必备篇——Python字符串 学习
点击加载更多

相似问题

StringIO initial_value必须是字符串,而不是字节

17

TypeError: initial_value必须是unicode或无,不能是字符串,

176

TypeError: initial_value必须是字符串或无,而不是python 3中的字节?

30

Python3的openpyxl出现StringIO错误

10

TypeError: initial_value必须为_io.BytesIO或None,而不是str

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文