sfy-cnblogs

导航

文件操作

open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)
打开一个文件,返回一个文件对象(流对象)和文件描述符。打开文件失败,则返回异常。
file:打开或要创建的文件名。如果不指定路径,默认是当前路径
文件描述符:操作系统为了跟踪每个打开的'文件',给每个文件分配了一个非负整数,这个数字就是文件描述符
0 Standard input stdin 标准输入 对应设备 :键盘
1 Standard Ouput stdout 标准输出 对应设备: 屏幕
2 Standard Error stderr 标准错误 对应设备: 屏幕
总结
0 = 读数据(键盘)
1 = 打印正常信息(屏幕)
2 = 打印错误信息(屏幕
mode:
r: 只读模式
只读打开的文件,如果文件不存在,抛出FileNotFoundError异常
w: 只写模式
表示只写方式打开,读取则抛异常
如果文件不存在,则直接创建文件
如果文件存在,则清空文件内容
x:
文件不存在,创建文件,并只写方式打开
文件存在,抛出FileExistsError异常。
a:
文件存在,只写打开,文件末尾追加内容
文件不存在,则创建,只写打开,文件末尾追加内容
b:
二进制模式
字节流,将文件的字节按照字节理解,与字符编码无关,二进制模式操作时,字节操作使用bytes类型。
t:
缺省的,文本模式
字符流,将文件的字节按照某种字符编码理解,按照字符操作。open的默认mode就是rt
+:
读写打开一个文件,给原来只读或只写方式提供缺失的能力。即只读可以+写,只写模式添加+读
注意
wb+模式会将文件既有内容全部清除

文件访问模式有两种:文本模式和二进制模式。不同模式下,操作函数不尽相同,表现得结果也不一样

点击查看代码
f=open("text")  #file对象 
windows <_io.TextIOWrapper name = 'test' mode = 'r' encoding = 'cp936'>
linux   <_io.TextIOWrapper name = 'test' mode = 'r' encoding = 'utf-8'>
print(f,read()) #读取文件
f.close()   #关闭文件

文件指针:指向当前字节位置
mode=r 指针起始在0
mode=a 指针起始在EOF
tell() 显示指针当前位置
seek(offset[,whence]) 移动文件指针位置。offest偏移多少字节(相对于起始位置0),whence从哪里开始偏移

文本模式下
whence 0 缺省值,表示从头开始,offset只能是正整数
whence 1 表示从当前位置,offset只接受0
whence 2 表示从EOF开始,offset只接受0
二进制模式下
whence 0 缺省值,表示从头开始,offset只能正整数
whence 1 表示从当前位置,offset可正可负
whence 2 表示从EOF开始,offset可正可负
注意
二进制模式下,offset向前偏移,需注意不要超界,超界抛异常,向后超界不抛异常

encoding:编码,仅文本模式使用
None表示使用缺省编码,依赖操作系统。
winodws下缺省GBK(0xB0A1)
linux下缺省UTF-8(0xE5 95 8A)
errors:
None和strict表示有编码错误将抛出ValueError异常,ignore表示忽略
newline:
文本模式中,换行的转换。可以为None、' '、'\r'、'\n'、'\r\n'
读时,None表示'\r'、'\n'、'\r\n'都被转化为'\n',' '表示不会自动转换通用换行符,其他合法字符表示换行符就是指定字符,就会按照指定字符分行。
写时,None表示'\n'都会被替换为系统缺省行分隔符os.linesep,'\n'或' '表示'\n'不替换,其他合法字符表示'\n'会被替换为指定的字符
closefd:关闭文件描述符,True表示关闭它,False会在文件关闭后保持这个描述符
fileobj.fileno() 查看
read(size=-1)
size表示读取的多少个字符或字节,负数或者None表示读取到EOF
readline(size=-1)
一行行读取文件内容。size设置一次能读取行内几个字符或字节
readline(hint=-1)
读取所有行的列表。指定hint则返回指定的行数
write(s)
把字符串s写入到文件中并返回字符的个数
close
flush并关闭文件对象,文件已经关闭,再次关闭没有任何效果
seekable()
是否可seek
readable()
是否可读
writable()
是否可写
closed()
是否已经关闭

上下文管理:
一种特殊的语法,交给解释器去释放文件对象
使用with ...as关键字
with open("text") as f
当文件已有变量名接收,则直接使用with
f=open("text")
with f:
pass
上下文管理的语句并不会开启新的作用域
with语句块执行完的时候,会自动关闭文件对象

posted on 2026-05-28 20:13  睡佛爷  阅读(7)  评论(0)    收藏  举报