广东深圳广东深圳网站建设,惠州网站开发公司电话,商标查询官方入口,wordpress误删的后果Python3 open() 函数详解 读取文件写入文件追加文件二进制文件
open()函数的主要作用是打开文件并返回相应文件对象#xff0c;使用文件对象可以对当前文件进行读取、写入、追加等操作#xff0c;默认情况下r模式#xff0c;文件不存在的话会发生OSError错误的。…Python3 open() 函数详解 读取文件写入文件追加文件二进制文件
open()函数的主要作用是打开文件并返回相应文件对象使用文件对象可以对当前文件进行读取、写入、追加等操作默认情况下r模式文件不存在的话会发生OSError错误的。
它是Python的内置函数在python文件中直接可以使用。语法
#常用方式
open(file, moder)
#完整参数
open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone)
参数
file - 文件的路径相对或绝对
mode[可选] - 指定文件的打开模式分为只读只写读写追加等。还有一些常用的组合模式详见下表
模式及含义
字符含义
r只读方式打开文件文件不可写文件如果不存在则报错打开文件后指针会放在文件的开头这是默认模式
w打开文件只用于写入内容不可读取如果文件不存在则自动创建如果原文件已存在则会将其清空覆盖。
x独占只写模式所谓独占就是要求当前指定文件必须是不存在的然后再由它进行创建。如果已存在则会报错。
a打开文件用于追加只写如果文件不存在则自动创建如果已存在则在文件内容的最后追加内容。
b二进制模式一般用于非文本文件如图片等。
t文本模式默认
读写模式一般配合只读、只写模式使用以扩充它们的功能。
U通用换行模式已废弃
常用组合模式
字符含义
r打开文件用于读写指针放在文件开头写入的内容从当前所在位置进行替换需要注意如果是新打开的文件就是从开头开始替换如果使用了readline或readlines方法读取内容后当前位置会发生改变的。
rb以二进制格式打开文件用于只读文件不存在会报错。
rb以二进制格式打开文件用于读写写入的内容类型必须是bytesb类型。写入的内容从当前所在位置进行替换。
w打开文件用于读写文件不存在则创建存在则覆盖。
wb以二进制格式打开文件用于只写写入的内容类型必须是bytesb类型。
wb以二进制格式打开文件用于读写写入的内容类型必须是bytesb类型。写入的内容直接覆盖原文件。
a打开文件用于读写文件不存在则创建存在则在文件内容末尾追加内容。
ab以二进制格式打开文件用于只写追加写入的内容类型必须是bytesb类型。
ab以二进制格式打开文件用于读写写入的内容类型必须是bytesb类型。写入的内容会在文件内容末尾追加。
buffering[可选] - 用于设置缓冲策略必须是一个整数传递0关闭缓冲仅允许在二进制下可以使用,传递1则是行缓冲仅在文本模式下可用传递大于1的整数则是指定缓冲区的大小以字节为单位如果没有给出指定的缓冲策略将按照二进制文件以固定大小进行缓冲在许多的系统上缓冲区的长度通常为4096或8192字节而“交互式”文件文件isatty()返回True使用行缓冲其他文件文件与二进制文件的一致。
encoding[可选] - 指定打开文件的编码和解码的字符编码应该只用于文本模式下。
errors[可选] - 指定文件在编码和解码时发生错误的处理方式默认是严格的模式发生错误会报ValueError错误其他参数详见下表
字符含义
strict严格模式发生错误会直接报错与不传递值效果一致。
ignore忽略模式一般不建议使用可能会导致数据丢失。
replace在有错误的地方插入指定的标记。可以是任意字符串例如?
surrogateescape一般用于处理未知编码的文件
xmlcharrefreplace仅在写入时使用将编码不支持的字符转换为相应的XML字符
backslashreplace用Python的反向转义序列替换格式错误的数据
namereplace仅在写入时使用用\N{...}转义序列替换不支持的字符
newline[可选] - 指定换行模式仅适用于文本模式可以是None,\n,\r和\r\n。
closefd[可选] - 如果参数为false时且file给的是文件描述符则在关闭文件时底层文件描述符将保持打开状态如果file给出的是文件名则必须为True默认值否则报错。
opener[可选] - 自定义文件的开启者这个不常用。
返回值
相应文件对象
实例
§ 实例1 - rrrbrb模式
#r
f open(text.txt, r)
f.readline()
abcdefg1234567
f.close()
#r
#r是只读模式由于加上了号就变成了读写模式了但是它与其他写模式不同它是从当前光标位置开始写入的默认是从文件内容的头部开始。可以通过seek来控制光标位置也会受到read、readline、readlines影响。
#本例中头部的abc被替换成了aaa。
f open(text.txt, r)
f.write(aaa)
f.seek(0)
f.read()
aaadefg1234567
f.close()
#rb
f open(text.txt, rb)
f.read()
babcdefg1234567
#rb
f open(text.txt, rb)
f.write(baaa)
f.seek(0)
f.read()
baaadefg1234567
f.close()
§ 实例2 - wwwbwb模式
#text.txt原本内容为“abcdefg1234567”。
#w
#由于w是只写模式所以写入完毕后还得再打开一次才能读取到内容。
f open(text.txt, w)
f.write(aaa)
f.close()
f open(text.txt, r)
f.readline()
aaa
f.close()
#从结果可以看出文件的内容被完全覆盖了。
#w
#这样就可以覆盖然后又读取了。
f open(text.txt, w)
f.write(aaa)
f.seek(0)
f.read()
aaa
f.close()
#wb
f open(text.txt, wb)
f.write(baaa)
f.close()
f open(text.txt, r)
f.read()
aaa
f.close()
#wb
f open(text.txt, wb)
f.write(baaa)
f.seek(0)
f.read()
baaa
f.close()
§ 实例3 - aaabab模式
#text.txt原本内容为“abcdefg1234567”。
#a
#由于a是只写模式所以写入完毕后还得再打开一次才能读取到内容。
f open(text.txt, a)
f.write(aaa)
f.close()
f open(text.txt, r)
f.read()
abcdefg1234567aaa
f.close()
#a
#这样就可以追加然后又读取了。
f open(text.txt, a)
f.write(aaa)
f.seek(0)
f.read()
abcdefg1234567aaa
f.close()
#ab
f open(text.txt, ab)
f.write(baaa)
f.close()
f open(text.txt, r)
f.read()
abcdefg1234567aaa
f.close()
#ab
f open(text.txt, ab)
f.write(baaa)
f.seek(0)
f.read()
babcdefg1234567aaaaaa
f.close()
§ 实例4 - x模式
#假设text.txt是存在的。
#由于text.txt是不存在的所以顺利执行了。我们再执行一次试试。
f open(text.txt, x)
f.write(abc)
f.close()
f open(text.txt, r)
f.read()
abc
f.close()
#就会执行报错了。提示text.txt文件已经存在了。用x可以防止文件被覆盖或修改只能一次性创建并写入内容。
f open(text.txt, x)
FileExistsError: [Errno 17] File exists: text.txt