目录
(1)r 以只读的形式打开文件,也可默认不写。(说白了就是只能读,不能操作)
(4)rb+ (在rb的基础上可以写,不详细介绍。同(3)一样)
(1)w (打开一个文件用于写,如果没有会创建,有的话内容会被清空)
(2)w+(打开一个文件用于读写,没有则会创建,有的话内容会被清空)
(5)a (打开一个文件用于追加,如果文章存在的话,只能放在末尾开始写,没有则创建新文件)
(6)a+(打开一个文件用于追加读写,如果文章存在的话,只能放在末尾开始写,没有则创建新文件)
(3)readlines把每行变成列表的一个元素然后输出列表
一.文件权限
读取操作 | r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 | |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 | |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 | |
写操作 | w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 | |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 | |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 | |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 | |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 | |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 | |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
二.文件操作
根据上面的文件权限,我们来进行一个一个的操作。
首先,我们要明白文件读取的一个规则,文件中有一个指针,如果你在读或者写,都会移动!!!
假如,我现在写一篇文章,写完了,指针应该在文章尾部才对。如果我们在读,会发现读不出东西,为啥?
因为指针在最后,读是读取指针位置后面的内容。
这是我们需要读和写的两个文件。它的位置是c.txt 和 一个二进制图片
1.写文件(r)
(1)r 以只读的形式打开文件,也可默认不写。(说白了就是只能读,不能操作)
file = open('D:/py/7.文件操作/file/c.txt',mode ='r')
ret =file.read()
print(ret)
读取结果如下:
(2)rb以只读形式打开二进制文件,一般是图片等
file = open('D:/py/7.文件操作/file/图片1.png',mode ='rb')
ret =file.read()
print(ret)
结果如下:
会转成12进制
(3)r+ 打开一个文件用于读写.(可以读,也可以写)
在这里,我们先介绍一个后面要说的内容,如果我们用‘w’写,文件里面的内容会全部清零。
file = open('D:/py/7.文件操作/file/c.txt',mode ='r+')
ret =file.read()
print(ret)
file.write('爱你')
ret =file.read()
print(ret)
由上看,我们先读,所以读的是c.txt原本的内容。之后我们用write写,所以内容会被清零,只留下‘爱你’。
结果如下:
(4)rb+ (在rb的基础上可以写,不详细介绍。同(3)一样)
2.读文件(w 和 a)
(1)w (打开一个文件用于写,如果没有会创建,有的话内容会被清空)
你只要用这个,原文就会被删除!!!!
file = open('D:/py/7.文件操作/file/c.txt',mode ='w')
file.write('斯人若彩虹')
原文已被删除,只有我们写的内容
(2)w+(打开一个文件用于读写,没有则会创建,有的话内容会被清空)
file = open('D:/py/7.文件操作/file/c.txt',mode ='w+')
file.write('斯人若彩虹')
file.seek(0,0)
ret1 = file.read()
print('我是第一次写:',ret1)
这个功能能够让我们变写变读,现在我们试试
首先,我们只要调用这个功能!内容就会被清空!!,我们写了进去,但是如果读读不出来(因为指针在文章最后!),所以我们调用seek函数(后面会说),这边把指针变到文章开头,就能读出来!
结果如下:
(3)wb(同(1),只是写二进制而已)
(4)wb+(同(2),只是读写二进制而已)
(5)a (打开一个文件用于追加,如果文章存在的话,只能放在末尾开始写,没有则创建新文件)
原文件:
使用程序:
file = open('D:/py/7.文件操作/file/c.txt',mode ='a')
file.write('斯人若彩虹')
(6)a+(打开一个文件用于追加读写,如果文章存在的话,只能放在末尾开始写,没有则创建新文件)
原文件:
使用程序:
file = open('D:/py/7.文件操作/file/c.txt',mode ='a+')
print(file.read())
file.write('斯人若彩虹')
(7)ab(同(5)只是用于二进制文件)
(8)ab+(同(6)只是用于二进制文件)
3.其它操作
(1)read(num)
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,会导致程序卡死,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。
读取上面文件:
file = open('D:/py/7.文件操作/file/cc.txt',mode ='r')
file.seek(0,2)
a = file.tell()
file.seek(0,0)
for i in range(0,a,3):
print(file.read(3))
(2)readline一行一行读
因为每读到\n就会换行,所以我们print的时候要加end=‘’,避免再次换行
file = open('D:/py/7.文件操作/file/cc.txt',mode ='r')
file.seek(0,2)
a = file.tell()
file.seek(0,0)
for i in range(0,a,3):
print(file.readline(),end='')
(3)readlines把每行变成列表的一个元素然后输出列表
file = open('D:/py/7.文件操作/file/cc.txt',mode ='r')
print(file.readlines(),end='')
(6)writelines一次性写入
file = open('D:/py/7.文件操作/file/cc.txt',mode ='w+')
lst = ['aa\n','bb','c']
file.writelines(lst)
(7)tell
tell获取文件当中当前光标所在的位置
(8)seek
seek移动光标位置
参数:
offset 移动的长度(字节)
whence 相对位置 0从开头(默认),1从当前,2从末尾
4.练习
要求:阅读电子书,自动翻页,每次就翻3页,阅读完要有提示
import time
def aa(path,line = 3):
with open(path,'r') as a:
a.seek(0, 2)
end = a.tell()
a.seek(0,0)
while True:
for i in range(line):
print(a.readline(),end='')
time.sleep(1)
b = a.tell()
if b == end:
print('阅读结束!')
break
aa('d:/py/7.文件操作/file/cc.txt')