python3 TypeError: a bytes-like object is required, not 'str'

问题:python3 TypeError: a bytes-like object is required, not ‘str’

运行机器学习算法原理与编程实践的代码:

import sys
import os
import jieba

def savefile(savepath, content):
    fp = open(savepath, "wb")
    #content = str.encode(content)
    fp.write(content)
    fp.close()

def readfile(path):
    fp = open(path, "rb")
    print(path)
    content = fp.read()
    fp.close()
    return content

corpus_path = "train_corpus_small/"
seg_path = "train_corpus_seg/"

catelist = os.listdir(corpus_path)

for mydir in catelist:
    class_path = corpus_path + mydir + "/"
    seg_dir = seg_path + mydir + "/"
    if not os.path.exists(seg_dir):
        os.makedirs(seg_dir)
    file_list = os.listdir(class_path)
    for file_path in file_list:
        fullname = class_path + file_path

        content = readfile(fullname)
        #content = str(content, encoding='utf-8')
        content = content.strip()
        content = content.replace("\r\n", "").strip()
        content_seg = jieba.cut(content)
        savefile(seg_dir+file_path, " ".join(content_seg))

print("中文语料分词结束!")

报错:a bytes-like object is required, not ‘str’

网上搜了后,这是在pyhon2中是可以的,但是python3中不支持。尝试将读写文件中打开文件不以二进制的形式,而以文本的形式,但是报了一些编码上的错误。后来想是否存在二进制序列与str之间是否存在相互转换的功能,经过网上搜索,找了解决方案。

str转换成bytes

>>> s="我是中国人"
>>> s
'我是中国人'
>>> type(s)
<class 'str'>
>>> b1 = bytes(s, encoding = 'utf-8')
>>> type(b1)
<class 'bytes'>
>>> b1
b'\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'
>>> b2 = str.encode(s)
>>> b2
b'\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'
>>> b3 = s.encode()
>>> b3
b'\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'
>>> 

bytes转str

>>> s1 = str(b1, encoding = 'utf-8')
>>> s1
'我是中国人'
>>> s2 = bytes.decode(b1)
>>> s2
'我是中国人'
>>> s3 = b1.decode()
>>> s3
'我是中国人'
>>> 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值