1 """
2 file_open.py
3 文件打开方式训练
4 """
5
6 # 打开文件
7 try:
8 # fd = open('a.py','r') # 以只读打开
9 # fd = open('a.py','w') # 以只写方式打开
10 # fd = open('a.py','a') # 追加方式
11
12 """
13 普通的文本文件
14 既可以使用文本方式打开也可以使用二进制方式打开
15 二进制文件则必须以二进制方式打开
16 """
17 fd = open('a.py','rb') # 二进制方式
18 print(fd)
19 except Exception as e:
20 print(e)
21
22 # 读写文件
23
24 # 关闭文件
25 fd.close()
1 """
2 file_read.py
3 文件读取演示
4 """
5
6 # 打开文件
7 f = open('test','r')
8
9 # read 循环读取
10 # while True:
11 # # 读到文件结尾返回空字符串
12 # data = f.read(1024) #每次最多读100字符
13 # # 读到结尾跳出循环
14 # if not data:
15 # break
16 # print(data)
17
18 # 读取一行内容
19 # data = f.readline(10) # 读取前10个字符
20 # print("一行内容:",data)
21 # data = f.readline() # 读完第一行剩余内容
22 # print("一行内容:",data)
23
24 # 将内容读取为列表,每行为列表一个元素
25 # data = f.readlines(18) #前18个字符所在的行作为读取对象
26 # print(data)
27
28 # f为可迭代对象
29 for i in f:
30 print(i) # 每次迭代到一行内容
31
32 # 关闭
33 f.close()
1 """
2 file_write.py
3 文件写操作演示
4 """
5
6 # 打开文件
7 # f = open('test','w')
8 # f = open('img.jpg','wb')
9 f = open('test','a') # 追加
10
11 # 写操作
12 # f.write("hello 死鬼\n".encode())
13 # f.write("哎呀,干啥".encode())
14
15 # 将列表写入 人为添加换行
16 l = ['hello world\n','哈哈哈']
17 f.writelines(l)
18
19 f.close()
file_object = open(file_name, access_mode='r', buffering=-1)
功能:打开一个文件,返回一个文件对象。
参数:file_name 文件名;
access_mode 打开文件的方式,如果不写默认为‘r’
文件模式 操作
r 以读方式打开 文件必须存在
w 以写方式打开
文件不存在则创建,存在清空原有内容
a 以追加模式打开
r+ 以读+写模式打开 文件必须存在
w+ 以读+写模式打开文件
不存在则创建,存在清空原有内容
a+ 以读写模式打开 追加模式
rb 以二进制读模式打开 同r
wb 以二进制写模式打开 同w
ab 以二进制追加模式打开 同a
rb+ 以二进制读写模式打开 同r+
wb+ 以二进制读写模式打开 同w+
ab+ 以二进制读写模式打开 同a+
buffering 1表示有行缓冲,默认则表示使用系统默认提供的缓冲机制。
返回值:成功返回文件操作对象。
1 # 打开文件
2 f = open('test','r')
3
4 # read循环读取文件
5 while True:
6 # 一次最多读取1024字节
7 data = f.read(1024)
8 # 读到文件结尾得到空字符串,此时跳出循环
9 if not data:
10 break
11 print("读取的内容:",data)
1 # 打开文件
2 f = open('test','r')
3
4 # 读取一行内容
5 data = f.readline()
6 print("读取的内容:",data)
7 data = f.readline()
8 print("读取的内容:",data)
1 # 打开文件
2 f = open('test','r')
3
4 # 读取所有内容,每行作为列表中一个元素
5 data = f.readlines()
6 print("读取的内容:",data)
文件对象本身也是一个可迭代对象,在for循环中可以迭代文件的每一行。
1 # 打开文件
2 f = open('test','r')
3 # 每次获取文件一行
4 for line in f:
5 print(line)
1 # w原有内容被清除,a则追加
2 #f = open('test','a')
3 f = open('test','wb')
4 # 如果是wb打开要转换为字节串写入
5 f.write("hello word\n".encode())
6 f.write("python".encode())
7
8 f.close()
1 # w原有内容被清除,a则追加
2 f = open('test','a')
3
4 f.writelines(['abc\n','def\n'])
5
6 f.close()
with语句的语法格式如下:
with context_expression [as target(s)]:
with-body
通过with方法可以不用close(),因为with生成的对象在语句块结束后会自动处理,所以也就不需要close了,但是这个文件对象只能在with语句块内使用。
1 with open('file','r+') as f:
2 f.read()
3 等同于----------------------
4 f=open(‘file’,‘r+’)
5 f.read()
6 f.close()
注意:
加b的打开方式读写要求必须都是字节串 无论什么缓冲,当程序结束或者文件被关闭时都会将缓冲区内容写入磁盘 with 语句块结束 f自动销毁
1 # 打开文件
2 try:
3 fd = open('img.jpg','ab+')
4 except FileNotFoundError as e:
5 print(e)
6
7 # 开始你的读写
8
9 # 关闭文件
10 fd.close()
- flush()
1 """
2 缓冲区
3 """
4
5 # 1表示行缓冲
6 f = open('test','w',1)
7
8 while True:
9 s = input(">>")
10 f.write("nihao\n")
11 # f.flush() # 将缓冲内容写入磁盘
12
13 f.close()
必须以二进制方式打开文件时基准位置才能是1或者2
1 # r,w打开文件偏移量在开头
2 # a打开文件偏移量在结尾
3 f = open('test','wb+')
4
5 f.write(b"hello\n")
6 f.flush()
7
8 print(f.tell()) #打印当前文件偏移量
9 f.seek(-3,2) # 以开头为基准向后移动0字节
10
11 data = f.read()
12 print(data)
1 f = open('test','wb')
2
3 f.write(b'start')
4 f.seek(1000,2) # 结尾位置向后移动1000字节
5 f.write(b'end')
6
7 f.close()
1 import time
2
3 f = open('log.txt','a+')
4
5 n = 0
6 f.seek(0,0) # 将偏移量移动待开始然后计数
7 for line in f:
8 n += 1
9
10 while True:
11 n += 1
12 time.sleep(1)
13 s = "%d. %s\n"%(n,time.ctime())
14 f.write(s)
15 f.flush() # 随时看到文件变化
1 # 输入文件名
2 filename = input("File:")
3
4 try:
5 fr = open(filename,'rb')
6 except FileNotFoundError as e:
7 print(e)
8 else:
9 fw = open('file.jpg','wb')
10
11 # 循环复制
12 while True:
13 data = fr.read(1024)
14 if not data:
15 break
16 fw.write(data)
17
18 fr.close()
19 fw.close()