- 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()
-