文件操作模式
打开文件的两种方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
f = open('a.txt', mode='rt', encoding='utf-8') ''' f是文件的对象,括号内的第一个对象是文件的地址,可以是相对地址,也可以是绝对地址; 中间的对象是你选择要执行的模式,如果你只写主模式(纯净模式),默认从模式为t模式即文本模式,中间的mode可以省略; 第三个是编码格式一般用utf-8,在t模式下,必须标明编码格式,b模式下一定不要标明编码格式 ''' f.read() f.close() # 这里只是关闭了文件,并没有回收对象的资源 print(f) # 结果为<_io.TextIOWrapper name='a.txt' mode='rt' encoding='utf-8'>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
with open('a.txt', mode='rt', encoding='utf-8') as f: ''' f是文件的对象,括号内的第一个对象是文件的地址,可以是相对地址,也可以是绝对地址; 中间的对象是你选择要执行的模式,如果你只写主模式(纯净模式),默认从模式为t模式即文本模式,中间的mode可以省略; 第三个是编码格式一般用utf-8,在t模式下,必须标明编码格式,b模式下一定不要标明编码格式; 它会自动关闭文件,不需要手动书写代码 ''' f.read() print(f) # 结果为<_io.TextIOWrapper name='a.txt' mode='rt' encoding='utf-8'>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
with open('a.txt', mode='rt', encoding='utf-8') as f,open('b.txt', mode='rt', encoding='utf-8') as f1: pass
读写文件
文件内容
床前明月光,疑是地上霜
举头望明月,低头思故乡
1.read()
读取文件所有内容,当文件不存在时,报错
read内可以有参数,且参数为数字。在rt模式下,数字代表的是字符,除次之外,数字代表的是字节
f = open(r'libai',encoding = 'utf-8') print(f.read()) 床前明月光,疑是地上霜 举头望明月,低头思故乡
2.readline()
只读取一行内容,若文件不存在则报错
f = open('libai',encoding = 'utf-8') print(f.readline()) 床前明月光,疑是地上霜
3.readlines()
把文章内容以换行符分割,并生成list格式(数据量大的时候不建议用)
f = open('libai',encoding = 'utf-8') print(f.readlines()) ['床前明月光,疑是地上霜\n', '举头望明月,低头思故乡']
4.二进制读取“rb”
#rb 二进制模式读取 f = open('libai','rb') #主要用于网络传输 print(f.readline())
b'\xe5\xba\x8a\xe5\x89\x8d\xe6\x98\x8e\xe6\x9c\x88\xe5\x85\x89\xef\xbc\x8c\xe7\x96\x91\xe6\x98\xaf\xe5\x9c\xb0\xe4\xb8\x8a\xe9\x9c\x9c\r\n'
5.二进制写“wb”
f = open('libai','wb') f.write('中文'.encode())
flush,tell,truncate和游标操作
1.flush
将内存中文件刷新到硬盘中
2.tell
查看当前光标移动多少字节
3.truncate
截断文件内容
4.游标
f.seek(offset,whence) offset:相对偏移量 光标移动的位数(默认是从左往右,偏移量是字节个数,中文在utf-8内是三个字节,英文是一个字节) whence: 0:参照文件的开头 t和b都可以使用,在rt+或r+b模式下,如果游标不在末尾,将从游标的位置后进行覆盖 如果游标在末尾,则进行添加操作 1:参照光标所在的当前位置 只能在b模式下用。r+b模式下,如果游标不在末尾,将从游标的位置后进行覆盖如果游标在末尾,则进行添加操作 2:参照文件的末尾只能在b模式下使用
文件修改的两种方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
'''文件修改 逻辑思维1:1. 把文件从硬盘读到内存中(即打开文件) 2. 将文件内容一次性全部读取出来,赋值给data变量 3. 对data变量进行修改操作 4. 打开文件,将被修该好的变量写入到文件中(即将文件保存到硬盘中。 ''' with open('a.txt', 'r', encoding='utf-8') as f: data = f.read() data = data.replace('is', 'shji') with open('a.txt', 'r', encoding='utf-8') as f: f.write(data) ''' 文件的拷贝 1. 把文件从硬盘读到内存中(即打开文件),同时新建另一个文件b.txt. 2. 一行一行读取文件并将文件追加到新文件中。 3. 删除老文件,并将新文件重新命名 ''' import os with open('a.txt', 'r', encoding='utf-8') as f, open('b.txt', 'a', encoding='utf-8') as f1: for line in f: f1.write(line) os.remove('a.txt') os.rename('b.txt', 'a.txt') '''文件的修改 逻辑思维2:1. 把文件从硬盘读到内存中(即打开文件),同时新建另一个文件b.txt. 2. 一行一行读取文件并将修改后的文件内容追加到新文件中。 3. 删除老文件,并将新文件重新命名''' import os with open('a.txt', 'r', encoding='utf-8') as f, open('b.txt', 'a', encoding='utf-8') as f1: for line in f: line = line.replace('is', 'shji') f1.write(line) os.remove('a.txt') os.rename('b.txt', 'a.txt')
编码转换
方法