python write()参数错误,导致报错TypeError: a bytes-like object is required, not ‘str‘

# -*- coding: utf-8 -*-
import random,string

filerad = open('C:/Users/Administrator/Desktop/randomnum.txt','wb')

for i in range(200):
    chars = string.ascii_letters + string.digits
    list = [ random.choice(chars) for i in range(8)]

    snew = ''.join(list) + '\n'
    #print(snew)
    #filerad.write(snew.encode())
    filerad.write('{0}\n'.format(''.join(snew)))

filerad.close()

使用write函数时,出现报错

我觉得很奇怪,write函数为什么要求byte,而不是str?

根据报错查找后,通过encode()将str改为byte后,编译通过。但是这显然不是真正的原因

检查open函数,发现参数写为‘wb’,即按二进制write,所以后面出现TypeError: a bytes-like object is required, not 'str'的报错,将此次的参数修改为w后,编译通过,write的结果正确

filerad = open('C:/Users/Administrator/Desktop/randomnum.txt','wb')

以下为open模式:

(转自 http://blog.163.com/y845766643@126/blog/static/17104630220101123113029840/)

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都会忽略该字符。

  • 21
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值