文件操作流程:
1、打开文件 open()
2、操作文件 read 、write
read(n) n对应读指定个数的
2.x中读取的是字节!
3.x中读取的是字符!
read 往外读取文件,是以光标位置开始的,每读取一个,光标就往后移动一位。
readline() 默认是读取一行的内容。(第一行)
readlines() 读取每一行的内容,组成一个列表。
readable() 判断文件是否是可读的
对文件更改权限 mode 可以变更
默认是读操作:r,encoding 指定编码方式
写操作w encoding 指定解码方式 直接写入会覆盖原文件中的内容!
文件刚打开的时候,会将之前的内容清掉,如果没有文件的话,会先创建一个文件,再在里边儿写入内容!如果文件不关,内容可以一直被写入进去!
追加 a 在光标位置后边进行追加
x 也是写操作,不过是文件没有就创建,有的话会报错,对原文件不会更改
调整光标的位置 f.seek(0) #将光标移到开始位置!不同于read()方法,是按照字节来移动的。
f.seek(1,0)从光标的开始位置往后读取
f.seek(3,1)从当前位置往后读取
f.seek(-3,2)从最后位置往前读取
# 该模式一定按字节操作!
seek的应用:比如断点续传。
显示多少字节 f.tell()
可读可写模式 r+ w+ a+
r+ 光标位置,追加写入
w+ 打开文件的时候,先把之前文件内容清掉,然后再写入内容,
a+ 总是在最后位置添加! 光标直接到最后位置,直接读取读不到任何东西
总结
r w a w:覆盖写 a:追加写
r+:默认光标在开始位置,写一定是追加写
w+:覆盖写,想读取内容:seek调整
a+:光标默认在文件最后位置,不管光标位置,一定是追加写;想读取内容:seek调整
rb wb ab 二进制操作
rb 直接将磁盘中的字节数据放到内存,不需要解码。 wb及ab与rb意思相同,同样的都是将数据以字节的方式写读,不经过解码。
flush操作
刷新操作,立即将缓存内的数据内容存到磁盘
应用:
#进度条:
import sys
(文件,标准输出,在屏幕上输出内容!先把数据放到缓存中,等操作结束之后,再直接输出显示!)sys.stdout.write("hello")
代码如下:
import sys,time for i in range(61): s = "\r%d%% %s"%(i/60*100,"#"*i) sys.stdout.write(s) sys.stdout.flush() time.sleep(0.5) ‘\r‘是回车,‘\n‘是换行,前者使光标到行首,后者使光标下移一格,通常敲一个回车键,即是回车,又是换行(\r\n)。for每循环一次,输出的结果都重新刷新一次,以实现进度条的功能!
with:
with open("文件",模式) as f: #f = open("文件",模式)
f.read()
文件更改
由于文件内容保存之后,就不能再更改。
只能是新建一个文件,从新写入内容,将原文件删掉,把新写的文件重命名。
3、关闭文件 close() 数据操作在文件关闭之前会一直存在内存,等文件关闭的时候,所有变更的数据会一次性的存到磁盘上。