可读; 文件不存在就报错 覆盖(从光标处向后覆盖,传多少内容就覆盖多少,并不是全部擦除)
with open(r‘1.txt‘,mode=‘r+‘,encoding=‘utf-8‘) as f:
print(f.readable())
print(f.writable())
print(f.readlines())
f.seek(0,0)
f.write(‘HHHHH‘)
with open(r‘1.txt‘, mode=‘r+‘, encoding=‘utf-8‘) as f:
print(f.readlines())
# 执行结果 True True [‘This is a test.\n‘, ‘this is a test.‘] [‘HHHHHis a test.\n‘, ‘this is a test.‘]
可读; 文件不存在就新建 覆盖(‘w+‘模式打开文件的那一刻,文件已经被清除干净了) 只是比w多了一个‘可读’功能,但是由于清除,他的可读没什么实际效果
with open(r‘1.txt‘,mode=‘w+‘,encoding=‘utf-8‘) as f:
print(f.readable())
print(f.writable())
print(f.readlines())
f.seek(0,0)
f.write(‘HHHH‘)
with open(r‘1.txt‘,mode=‘r‘,encoding=‘utf-8‘) as f:
print(f.readlines())
# 执行结果 True True [] [‘HHHH‘]
可读可写; 文件不存在就新建; ‘a+‘模式打开文件,光标在文件尾部(seek也无法控制追加的位置,光标位置无论在哪,结果都是在末尾追加了)
with open(r‘1.txt‘,mode=‘a+‘,encoding=‘utf-8‘) as f:
print(f.readable())
print(f.writable())
print(f.readlines())
f.seek(0,0)
f.write(‘HHHHH‘)
with open(r‘1.txt‘, mode=‘r‘, encoding=‘utf-8‘) as f:
print(f.readlines())
# 执行结果 True True [] [‘This is a test.\n‘, ‘this is a test.HHHHH‘]
在rt模式下 read内的数字 表示的是字符的个数;除此之外,数字表示的都是字节
‘‘‘
文件内容:
This is a test.
this is a test.
‘‘‘
with open(r‘1.txt‘,‘r‘,encoding=‘utf-8‘) as f:
print(f.read(4))
# 执行结果 This
# 文本内容:这是一个测试
with open(r‘1.txt‘,‘rb‘) as f:
res = f.read(3) # 读的是三个字节bytes
print(res)
print(res.decode(‘utf-8‘))
# 执行结果 b‘\xe8\xbf\x99‘ 这
seek移动都是字节数 offset:相对偏移量 光标移动的位数 whence: 0:参照文件的开头 t和b都可以使用 1:参照光标所在的当前位置 只能在b模式下用 2:参照文件的末尾 只能在b模式下使用
import time
res = time.strftime(‘%Y-%m-%d %X‘)
with open(r‘test01.txt‘,‘a‘,encoding=‘utf-8‘) as f:
f.write(‘%s egon给jason发了1个亿的工资\n‘%res)
# 执行结果如下图

with open(r‘1.txt‘,‘rb‘) as f:
f.seek(0,2)
while True:
res = f.readline()
if res:
print(res.decode(‘utf-8‘))
无论是否指定光标位置,都是从开头截取指定长度 3,剩下内容的都删除。
如果截之前光标定过位,那就回到这个定位
方案概述: 字符串拿到文件内容--修改后w模式覆盖到文件中
具体步骤: a.读文件(现将文件内容从硬盘读到内存) b.字符串替换(在内存中完成修改) c.写文件(覆盖原来的内容)
优点:任意时间,硬盘上只有一个文件,不会占用过多的硬盘空间 缺点:文件过大的情况下,可能会内存溢出
with open(r‘1.txt‘, ‘r‘, encoding=‘utf-8‘) as f:
data = f.read()
print(data)
print(type(data))
with open(r‘1.txt‘, ‘w+‘, encoding=‘utf-8‘) as f:
res = data.replace(‘I‘, ‘You‘)
f.write(res)
f.seek(0, 0)
print(f.read())
# 执行结果 I can fly. <class ‘str‘> You can fly.
概述:读取老文件内容--修改后写入新文件--删除旧文件,重命名新文件
具体步骤: a.创建一个新文件 b.循环读取老文件到内存,将修改好的内容写道新文件 c.删除旧文件,重命名新文件
import os
with open(r‘1.txt‘,‘r‘,encoding=‘utf-8‘) as read_f, open(r‘1.swap‘,‘a‘,encoding=‘utf-8‘) as write_f:
print(read_f.read())
read_f.seek(0,0)
for line in read_f:
new_line = line.replace(‘I‘,‘You‘)
write_f.write(new_line)
os.remove(‘1.txt‘)
os.rename(‘1.swap‘,‘1.txt‘)
with open(r‘1.txt‘,‘r‘,encoding=‘utf-8‘) as read_f:
print(read_f.readlines())
# 执行结果 I can fly. I can fly. [‘You can fly.\n‘, ‘You can fly.‘]
函数名的命名规则跟变量名一模一样 函数就是工具,并且函数必须先定义后调用(函数名+括号) 定义时只检测语法,不执行代码
可以通过变量名找到变量对应的值 同理:可以通过函数名+括号 找到函数体所对应的代码并执行
原文:https://www.cnblogs.com/buzaiyicheng/p/11153674.html