r+,w+,a+
with open (r'D:python_workspaceday8文件处理 est.txt','r+',encoding = 'utf-8') as f: print(f.readable()) #判断可读 True print(f.writable()) # 判断可写 True print(f.readline()) # 读取第一行内容 f.write('嘿嘿') # 将字符串添加到文件中
with open (r'D:python_workspaceday8文件处理 est.txt','w+',encoding = 'utf-8') as f:
print(f.readable()) #判断可读 True
print(f.writable()) # 判断可写 True
print(f.readline()) #读取内容为空
f.write('嘿嘿') # 将字符串添加到文件中
with open(r'a',mode='r+b') as f: print(f.readable()) #判断可读 True print(f.writable()) # 判断可写 True res = f.read() #返回的是二进制数 print(res) # b'xe5x98xbfxe5x98xbf xe5x93x88xe5x93x88 xe5x93x88xe5x96xbd' print(res.decode('utf-8')) # 返回的是文件内容 res1 = str(res,encoding='utf-8') print(res1) # 返回的是文件内容
在rt模式下,read内的n表示的是字符个数
其他情况下,n表示的是字节数
with open(r'a','rb') as f: res = f.read(9) # 读的是三个字节bytes print(res) # 读取的是二进制数b'xe5x98xbfxe5x98xbfxe5xbex88' print(res.decode('utf-8')) # 打印的是三个字符
f.seek(offset,whence) offset:相对偏移量 光标移动的位数 whence: 0:参照文件的开头 t和b都可以使用 1:参照光标所在的当前位置 只能在b模式下用 2:参照文件的末尾 只能在b模式下使用
with open(r'a','rt',encoding='utf-8') as f: print(f.read(1)) # 读取文件中的第一个字 f.seek(6,0) # 0是将光标放到文件的开头,6是将光标移动6个字节 print(f.read(1)) # 读取一个字符 f.seek(0,0) # 将光标放到文件开头,不移动光标 print(f.read()) # 将光标之后的字符都读取出来
with open(r'a','rb') as f:
print(f.read(6).decode('utf-8')) # 读取六个字节 f.seek(9,1) # 光标在当前读取的位置,然后移动9个字符 print(f.read(1).decode('utf-8')) # 读取一个字节
with open(r'D:python_workspaceday8文件处理a','rb') as f: f.seek(0,2) # 将光标移动到文件末尾 while True: res = f.readline() if res: print("新增的文件内容:%s" % res.decode('utf-8'))
with open(r'a','a',encoding='utf-8') as f: f.truncate(3) # 接收的字节长度 整形
# 修改文件 # 先将数据由硬盘读到内存(读文件) # 在内存中完成修改(字符串的替换) # 在覆盖原来的内容(写文件) with open (r'D:python_workspaceday8文件处理 est.txt','r',encoding = 'utf-8') as f: data = f.read() print(data) print(type(data)) with open (r'D:python_workspaceday8文件处理 est.txt','w',encoding = 'utf-8') as f: res = data.replace('哈喽','摩拜') print(data) f.write(res)
优点:任意时间硬盘上只有一个文件,不会占用过多的硬盘空间
缺点:当文件过大的时候,可能造成内存溢出
# 创建一个新文件 # 循环读取老文件内容到内存进行修改,将修改好的内容写到新文件中 # 将老文件删除 将新文件的名改成老文件名 import os with open (r'D:python_workspaceday8文件处理 est.txt','r',encoding = 'utf-8') as read_f, open (r'D:python_workspaceday8文件处理 est.swap','a',encoding = 'utf-8') as write_f: for line in read_f: new_line = line.replace('哈喽','摩拜') write_f.write(new_line) os.remove('test.txt') os.rename('test.swap','test.txt')
优点:内存中始终只有一行内容,不占空间
缺点:在某一时刻,硬盘上会同时存在两个文件
函数
def test(): 函数体 print(test())
可以通过变量名找到变量对应的值
可以通过函数名+括号 找到函数体所对应的代码并执行
函数名的命名规则跟变量名一样
函数就是工具,并且函数必须先定义后调用(函数名+括号)