目录
文件的高级应用及修改的两种方式
一、文件的高级应用
1.1 r+(既可读又可写)
with open('test.py', 'r+', encoding='utf8') as fr:
data = fr.read()
print(fr.writable())
fr.write('x = 10')
print(data)
------------------------------------------------
True
'''
sean sb
tank sb
jason sb
nick 大帅比
'''
1.2 w+(不建议使用)
with open('test.py', 'w+', encoding='utf8') as fr:
print(fr.readable())
fr.write('x = 10')
data = fr.read()
print(data)
----------------------------------------
True
1.2 a+(a的指针在末尾。更不建议使用)
with open('test.py', 'a+', encoding='utf8') as fr:
fr.seek(1, 0) #表示指针从头开始,偏移一位
data = fr.read() # 指针在末尾
print(data)
-----------------------------------------------------
= 10
二、文件的内置方法
2.1 seek 指针(按字节位移动)
with open('test.py', 'rb') as fr:
fr.seek(1) # 1表示位移1位,默认从文件头开始
fr.seek(1, 0) # 1表示偏移1位,0表示从头开始
fr.seek(2, 1) # 2表示偏移2位,1表示从当前位置开始
fr.seek(0, 2) # 0表示偏移0位,2表示文件末开始,把指针移到文件末
2.2 tell(告诉当前指针的位置) (按字节移动)
with open('test.py', 'r', encoding='utf8') as fr:
fr.seek(2, 0) #从文件头开始,偏移2位
print(fr.tell())
-----------------------------------------------------
2
2.3 read(n) (读几个字符)
with open('test.py', 'r', encoding='utf8') as fr:
print(fr.read(2)) # 读了2个字符也就是读了6个字节
2.4 truncate 截断 (按字节移动)
with open('test.py', 'a', encoding='utf8') as fr:
fr.truncate(2) # 把2个字节后面的东西全清空
#一个英文是1个字节,一个中文是3个字节
三、文件修改的两种方式
3.1 方式一
import os
with open('test.py', 'r', encoding='utf8') as fr,
open('test_swap.py', 'w', encoding='utf8') as fw:
data = fr.read() #全部读入内存,如果文件很大会很卡
data = data.replace('sb', 'ss') #在内存中完成修改
fw.write(data) # 新文件一次性写入原文件内容
os.remove('test.py') # 删除文件
os.rename('test_swap.py', 'test.py') # 重命名文件
3.2 方式二
import os
with open('test.py', 'r', encoding='utf8') as fr,
open('test_swap.py', 'w', encoding='utf8') as fw:
for i in fr #对fr文件里面的内容进行一个循环,逐行修改
i = i.replace('sb', 'ss') #在内存中完成修改
fw.write(i) # 新文件写入原文件修改后内容
os.remove('test.py') # 删除文件
os.rename('test_swap.py', 'test.py') # 重命名文件