文件操作
file对象使用open函数来创建,下表列出了file对象常用的函数。
1、file.close(): 关闭文件,关闭后文件不能再进行读写。
2、file.flush(): 刷新文件内部缓冲,直接把内部9缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入。
3、file.fileno(): 返回一个整型的文件描述符(file descriptor FD整型),可以用在如os模块的read方法等一些底层操作上。
4、file.isatty(): 如果文件链接到一个终端设备返回True,否则返回False。
5、file.next(): 返回文件下一行。
6、file.read([size]): 从文件读取指定的字节数,如果为给定或为负则读取所有。
7、file.readline([size]):读取整行,包括 "\n" 字符。
8、file.readlines([sizeint]):读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行,实际读取值可能比 sizeint 较大,因为需要填充缓冲区。
9、file.seek(offset[, whence]):设置文件当前位置
10、file.tell():返回文件当前位置。
11、file.truncate([size]):从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
12、file.write(str):将字符串写入文件,返回的是写入的字符长度。
13、file.writelines(sequence):向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
打开文件的三种模式:
1、只读模式(默认)
2、只写模式(不可读,不存在则创建,存在则覆盖)
3、追加模式(可读,不存在则创建,存在则只追加内容)
"+"表示可同时读写某个文件:
1、r+可读写文件(可读,可写,可追加)
2、w+写读
3、a+追加
"U" 表示在读取时,可以将\r \n \r \n自动转换成\n(与r或者r+模式同时使用)
因为Windows系统的转行符为\r\n,linux系统的转行符\n,加上U则能自动把\r\n转换成\n
1、rU
2、r+U
"b"表示处理二进制文件
1.rb
2.wb
3.ab
读取文件:
f = open(r'd:/a.txt', encoding='gbk', mode='r') print(f1.read()) f.close() f = open('log1', encoding='gbk', mode='r') print(f1.read()) f.close()
读取文件流程:
f 文件句柄,file,file_hander,f_h....
open()调用的内置函数,内置函数调用的系统内部的open,
一切对文件进行的操作都是基于文件句柄f.
执行流程:
1,打开文件,产生文件句柄。
2,对文件句柄进行操作。
3,关闭文件句柄。
1 读 r
#1 read() 全读出来 f1 = open('log1', encoding='utf-8') content = f1.read() print(content) f1.close()
2 read(n) 读一部分
f1 = open('log1', encoding='utf-8') content = f1.read(3) print(content) f1.close() # r 模式 read(n) 这里n按照字符读取。 # rb 模式 read(n) 这里n按照字节读取。 f1 = open('log1', mode='rb') print(f1.read(3).decode('utf-8')) f1.close()
3 readline() 按行读取
f1 = open('log1', encoding='utf-8') print(f1.readline()) print(f1.readline()) print(f1.readline()) f1.close()
4 readlines()
f1 = open('log1', encoding='utf-8') print(f1.readlines()) f1.close()
5 for 循环
f1 = open('log1', encoding='utf-8') for line in f1: print(line) f1.close()
6 r+ 读写 先读后写
f1 = open('log1', encoding='utf-8', mode='r+') f1.write('a') print(f1.read()) f1.close()
print(f1.read()) f1.write('666')
写:w
# w 没有文件,新建文件写入内容,有原文件,先清空内容,在写入新内容。 f1 = open('log2', encoding='utf-8', mode='w') f1.write('abcd') f1.close()
图片的读取及写入
f1 = open('1.jpg', mode='rb') content = f1.read() f2 = open('2.jpg', mode='wb') f2.write(content) f1.close() f2.close()
w+ 先写后读
f1 = open('log2', encoding='utf-8', mode='w+') f1.write('abcd') f1.seek(0) print(f1.read()) f1.close()
追加 a
#a 没有文件,新建文件写入内容 f1 = open('log3', encoding='utf-8', mode='a') # f1.write('abc 666') f1.write('\nabc 666') f1.close() # a+ f1 = open('log3', encoding='utf-8', mode='a+') f1.write('abc') f1.seek(0) print(f1.read()) f1.close()
调整光标位置
f1 = open('log2', encoding='utf-8')
f1.read()
print(f1.tell())
print(f1.seek(0))
print(f1.seek(0,2))
f1.seek(12) # 任意调整
f1.seek(0,2) #光标调整到最后
f1.seek(0) #光标调整到开头
print(f1.tell()) # 告诉光标的位置
f1.close()
按照字节对原文件截取,必须在a 或 a+ 模式
f1 = open('log3', encoding='utf-8', mode='a+')f1.truncate(3) # 这里的3代表的是字节f1.close()
不用主动关闭文件句柄,
with open('log1', encoding='utf-8') as f1,\ open('log2', encoding='utf-8', mode='w') as f2: content = f1.read() f2.write(content) with open('log1', encoding='utf-8') as f1: print(f1.read()) f1.close() pass with open('log1', encoding='utf-8',mode='w') as f2: f2.write('666')
小练习
文件的改
1、以读模式打开原文件。
2、以写的模式打开一个新文件。
3、将原文件读出按照要求修改将修改后的内容写入新文件。
4、删除原文件。
5、将新文件重命名原文件。
import os with open('file', encoding='utf-8') as f1,\ open('file.bak', encoding='utf-8', mode='w') as f2: old_content = f1.read() new_content = old_content.replace('ab', 'cd') f2.write(new_content) os.remove('file') os.rename('file.bak', 'file')