python笔记20190815—with open write TypeError: a bytes-like object is required, not 'str'

import csv

data = [('one', 1, 1.5), ('two', 2, 8.0)]
with open('out.csv', 'wb') as fp:#若利用'wb'参数写入时会遇到报错TypeError: a bytes-like object is required, not 'str'
    w = csv.writer(fp)
    w.writerows(data)

参考链接:https://blog.csdn.net/cathyspring/article/details/79444242

同理split遇到相同的问题,由于split是需要str类型的,当需要split的变量是bytes类型的时候,就会相同的报错。

 

方法一:可以通过直接写入无需带有’b‘参数

 

方法二:可以对写的字符进行str.encode处理转换成二进制在进行写入

文中指出open模式下:

r+: Open for reading and writing.  The stream is positioned  at  the beginning of the file.

w+:Open for reading and writing.  The file is created  if  it  does not  exist, otherwise it is truncated.  The stream is positioned at the beginning of the file.

r+具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容;

w+具有读写属性,写的时候如果文件存在,会被清空,从头开始写。

 

r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。 
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 


上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。

总结:在window上运行该程序会报错由于使用的以二进制打开文件造成的,可以直接写入文件即可。同时需要注意不同系统上的区别

 

a=b'Hello lyh'
c=a.split(' ')
#---------------------------------------------------------------------------
#TypeError                                 Traceback (most recent call last)
#<ipython-input-7-bad0b6d3e367> in <module>
#      1 a=b'Hello lyh'
#----> 2 c=a.split(' ')
#TypeError: a bytes-like object is required, not 'str'

可以通过decode的方法进行bytes转字符的转换即(a.decode())

str和bytes类型之间的常用转码方式:

1.str to bytes

  1)bytes(a,encoding='utf-8')

  2)str.encode(a)

  3)a.encode(encoding='utf-8')

2.bytes to str (3种方式)假设a是bytes类型

  1)str(a,encoding='utf-8')

  2)bytes.decode(a)

  3)a.decode()

引用:https://blog.csdn.net/bible_reader/article/details/53047550

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值