今天整理文件操作这一块的笔记,发现针对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
- 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进行换行
'''
打开模式mode类别
类别 | 描述 |
r | 只读,文件指针在文件的开头,如果文件不存在会抛异常 |
rb | 以二进制格式打开文件,只读,文件指针在文件的开头,如果文件不存在会抛异常 |
r+ | 读写,文件指针在文件的开头,如果文件不存在会抛异常 |
rb+ | 以二进制格式打开文件,读写,文件指针在文件的开头,如果文件不存在会抛异常 |
w | 只写【覆盖】,文件指针在文件的开头,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件 |
wb | 以二进制格式打开文件,只写【覆盖】,文件指针在文件的开头,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件 |
w+ | 读写【覆盖】,文件指针在文件的开头,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件 |
wb+ | 以二进制格式打开文件,读写【覆盖】,文件指针在文件的开头,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件 |
a | 只写【追加】,文件指针在文件的结尾,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件 |
ab | 以二进制格式打开文件,只写【追加】,文件指针在文件的结尾,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件 |
a+ | 读写【追加】,文件指针在文件的结尾,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件 |
ab+ | 以二进制格式打开文件,读写【追加】,文件指针在文件的结尾,如果文件存在,则打开后覆盖原有内容,若文件不存在会新建文件 |