当前位置:   article > 正文

python的open函数参数详解_valueerror: can't have unbuffered text i/o

valueerror: can't have unbuffered text i/o

今天整理文件操作这一块的笔记,发现针对open函数的参数详解的博客真的筛不出来,但是我又迫切的想知道各个参数具体是怎么用的,翻了好多个博客发现要么只有前两个参数的解释,要么就是直接把官网搬过来了。无奈之下我只能对着官网手抠案例,终于把参数这里理顺了
我直接从笔记里粘贴进来的,参数的解释和案例都摆上了。文件操作的其他详细内容将会在【python基础——文件操作中】

参数:
  • file_name:文件名,如果文件不在当前目录中需要指定路径
  • mode=‘r’:【可选】打开模式,如果不写默认为r只读打开
  • buffering=None:【可选】整数,用于设置缓冲策略。0表示关闭缓冲(只允许在二进制模式,否则报错ValueError: can’t have unbuffered text I/O),1表示选择行缓冲(仅在文本模式下可用),并以整数> 1表示 固定大小的块缓冲区的大小。没有缓冲参数时 默认的缓冲策略如下:
    • 二进制文件:以固定大小的块进行缓冲;缓冲区的大小通常为4096或8192字节长。
    • 文本文件:使用行缓冲
  • encoding=None: Encoding是用于解码或编码。只在文本文件被使用,默认为utf-8
  • errors=None: 如何处理编码错误,只适用于文本模式
处理标准错误含义
strict如果存在编码错误拋异常,和默认None效果一样
ignore忽略错误,但是需要注意如果忽略错误会导致数据丢失
replace将错误部分替换为�
backslashreplace用 Python 的反斜杠转义序列替换格式错误的数据。
使用utf-8编码写的中文使用gbk进行读取
UnicodeDecodeError: 'gbk' codec can't decode byte 0x97 in position 0: incomplete multibyte sequence     # strict
hello鍚              # ignore
hello鍚�         # replace
hello鍚\x97    # backslashreplace
  • 1
  • 2
  • 3
  • 4
  • 5
  • newline=None:控制通用换行符的工作方式,只适用于文本模式,可取的值有None、’’、’\n’、’\r’和 ‘\r\n’【’\n’、’\r’和 '\r\n’都会进行换行】
    • 如果是读,如果newline为none,通用换行模式开启,所有换行符都被转换为’\n’,如果newline为’’,通用换行模式开启,但是返回之前并不对换行符进行转换。如果newline为其他有效值,只有该值为换行符,也就是只按该值换行,不对换行符进行转换
    • 如果是写w或a,如果newline为none,任意’\n’都会被转换为系统的默认分隔符,可以通过执行os.linesep来查看自己系统的换行符是什么,mac为’\n’,如果newline为’‘或’\n’,不进行任何转换,如果是其他有效值,将’\n’转换成给定值
  • closefd=True:如果closefd是False并且给出了文件描述符而不是文件名,则在文件关闭时底层文件描述符将保持打开状态。如果给定文件名closefd必须是True(默认值),否则将引发错误。
f = open('test.txt', 'w', 10, None, None, None)
    f.write('nihaoya\nhaojiubujianle\r\nnizuijinhaoma\r')
    f.close()
    f = open('test.txt', 'r', 1, None, None, '')
    print(f.readlines())
    f.close()
# 先看写,将读的newline置为''不进行任何转换
    '''
更改写的newline
    None:['nihaoya\n', 'haojiubujianle\r\n', 'nizuijinhaoma\r']  # 将\n转换为系统换行符,mac执行os.linesep依旧是\n,所以相当于没有转换
    '':['nihaoya\n', 'haojiubujianle\r\n', 'nizuijinhaoma\r']    # 没有进行转换
    '\n':['nihaoya\n', 'haojiubujianle\r\n', 'nizuijinhaoma\r']    # 没有进行转换
    '\r':['nihaoya\r', 'haojiubujianle\r', '\r', 'nizuijinhaoma\r']   # 将\n转换成了\r
    '\r\n':['nihaoya\r\n', 'haojiubujianle\r', '\r\n', 'nizuijinhaoma\r']    # 将\n转换成了\r\n
    '''
# 下面将写部分的newline置为'',看读
  '''
    更改读的newline
    None:['nihaoya\n', 'haojiubujianle\n', 'nizuijinhaoma\n']    # 所有换行符都被换成了\n
    '':['nihaoya\n', 'haojiubujianle\r\n', 'nizuijinhaoma\r']    # 原样,没有进行任何转换
    '\r':['nihaoya\nhaojiubujianle\r', '\nnizuijinhaoma\r']      # 只按\r进行换行
    '\n':['nihaoya\n', 'haojiubujianle\r\n', 'nizuijinhaoma\r']  # 只按\n进行换行
    '\r\n':['nihaoya\nhaojiubujianle\r\n', 'nizuijinhaoma\r']    # 只按\r\n进行换行
    '''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
打开模式mode类别
类别描述
r只读,文件指针在文件的开头,如果文件不存在会抛异常
rb以二进制格式打开文件,只读,文件指针在文件的开头,如果文件不存在会抛异常
r+读写,文件指针在文件的开头,如果文件不存在会抛异常
rb+以二进制格式打开文件,读写,文件指针在文件的开头,如果文件不存在会抛异常
w只写【覆盖】,文件指针在文件的开头,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件
wb以二进制格式打开文件,只写【覆盖】,文件指针在文件的开头,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件
w+读写【覆盖】,文件指针在文件的开头,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件
wb+以二进制格式打开文件,读写【覆盖】,文件指针在文件的开头,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件
a只写【追加】,文件指针在文件的结尾,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件
ab以二进制格式打开文件,只写【追加】,文件指针在文件的结尾,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件
a+读写【追加】,文件指针在文件的结尾,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件
ab+以二进制格式打开文件,读写【追加】,文件指针在文件的结尾,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/278582
推荐阅读
相关标签
  

闽ICP备14008679号