文件操作
文件操作
文件的操作方法
模式 | 含义 |
---|---|
r | 文本只读模式 |
rb | 二进制模式 这种方法是用来传输或存储,不给人看的 |
r+ | 读写模式,只要有r,那么文件必须存在 |
rb+ | 二进制读写模式 |
w | 只写模式,不能读,用w模式打开一个已经存在的文件,如果有内容会清空,重新写 |
wb | 以二进制方式打开,只能写文件,如果不存在,则创建 |
w+ | 读写模式,先读后写,只要有w,会清空原来的文件内容 |
wb+ | 二进制写读模式 |
a | 追加模式,也能写,在文件的末尾添加内容 |
ab | 二进制追加模式 |
a+ | 追加模式,如果文件不存在,则创建文件,如果存在,则在末尾追加 |
ab+ | 追读写二进制模式,从文件顶部读取文件,从文件底部添加内容,不存在则创建 |
读操作
f = open('文件名','r',encoding='utf-8')
data = f.read()
print(data)
以二进制模式打开
f = open('文件名','rb',encoding='utf-8')
data = f.read()
print(data)
文件智能检测的文件编码
不知道文件是以什么方式存储的可以用chardet来进行检测
使用第三方软件包chardet
chardet语法
先安装chardet
pip3 install chardet
imoprt chardet
f = open('文件名,'rb')
data = f.read()
data2 = chardet.detect(data)
print(data2)
写操作
f = open('文件名','w',encdoing='utf-8')
f.write('内容')
f.close
以二进制写入
f = open('文件名','wb',encdoing='utf-8')
f.write('内容')
f.close
追加
f = open('文件名','a',encdoing='utf-8')
f.write('内容')
f.close
文件的其它操作方式
def fileno(self, *args, **kwargs): # real signature unknown
返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到
def flush(self, *args, **kwargs): # real signature unknown
把文件从内存buffer里强制刷新到硬盘
def readable(self, *args, **kwargs): # real signature unknown
判断是否可读
def readline(self, *args, **kwargs): # real signature unknown
只读一行,遇到\r or \n为止
def seek(self, *args, **kwargs): # real signature unknown
把操作文件的光标移到指定位置
*注意seek的长度是按字节算的, 字符编码存每个字符所占的字节长度不一样。
如“路飞学城” 用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4) 就把光标切换到了“飞”和“学”两个字中间。
但如果是utf8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了了,因为编码对不上了。少了一个字节
def seekable(self, *args, **kwargs): # real signature unknown
判断文件是否可进行seek操作
def tell(self, *args, **kwargs): # real signature unknown
返回当前文件操作光标位置
def truncate(self, *args, **kwargs): # real signature unknown
按指定长度截断文件
*指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。
def writable(self, *args, **kwargs): # real signature unknown
判断文件是否可写