Python3.7 csv模块写入报错TypeError: a bytes-like object is required, not 'str'

跟着github上找的代码写一个做词频分析的程序,由于源代码是用Python2写的,copy到Python3遇到了不兼容问题。

简化后的代码如下:

from collections import OrderedDict
import csv
import codecs

#读取已分好词的文本文档
path='E:/Programe/PySeg/2004.txt'
with open(path,'r',encoding='utf-8') as f:
    text=f.read()

#对读取的文档做词频统计
count_dict=dict()
for item in text.split('/'):
    if item in count_dict:
        count_dict[item]+=1
    else:
        count_dict[item]=1

#根据词汇出现的频率进行排序
d_sorted=OrderedDict(sorted(count_dict.items(),key=lambda x:x[1]))

#将统计好的词频信息写入csv文档
with open('E:/Programe/PySeg/2004_tj.csv','wb') as f:
    f.write(codecs.BOM_UTF8)
    w=csv.writer(f)
    w.writerows(d_sorted.items())

运行后报错:
在这里插入图片描述
网上查是Python2与Python3不兼容引起的,将最后一部分代码的以二进制形式’wb’写入改为写入’w’,并去掉f.write()这句话:

#将统计好的词频信息写入csv文档
with open('E:/Programe/PySeg/2004_tj.csv','w') as f:
    #f.write(codecs.BOM_UTF8)
    w=csv.writer(f)
    w.writerows(d_sorted.items())

又有了新的错误:
在这里插入图片描述
这个错误之前遇到过,在open()函数里做如下更改:

#将统计好的词频信息写入csv文档
with open('E:/Programe/PySeg/2004_tj.csv','w',encoding='utf-8-sig') as f:
    #f.write(codecs.BOM_UTF8)
    w=csv.writer(f)
    w.writerows(d_sorted.items())

运行不再报错,但生成的excel文件有空行,如图:
在这里插入图片描述
先暂时在excel中手动批量删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值