文件操作方法
1.读系列
with open(r'a.txt', 'a' , encoding='utf8') as f:
# print(f.read()) # 一次行读取文件内容
# print(f.readline()) # 每次只读一行文件
# print(f.readlines()) #读取文件所有的内容组织成列表
print(f.readable()) # 校验当前文件是否具备读的能力
2.写系列
with open(r'a.txt', 'w' , encoding='utf8') as f:
# f.write('克服一切困难') # 往文件内写入文本内容
# f.write(123) # 写入内容必须是字符串类型
# f.writelines(['maby', 'hello', 'fu*k']) # 可以将列表中的多个字符串元素全部拼接在一起
# print(f.writable()) # True
# print(f.readabel()) # False
# f.flush() # 直接将内存文件数据刷到硬盘 等于文本ctrl+s
文件优化操作

with open(r'a.txt', 'a' , encoding='utf8') as f:
print(f.read()) # 一次性读取文件内所有的内容
"""
1.一次性读完之后 光标停留在了文件末尾 无法再次读取内容
2.该方法在读取大文件的时候 可能会造成内存溢出的情况
"""
"""
for line in f: # 文件变量名f支持for循环 相当于一行行读取文件的内容
line
以后涉及多行文件内容的情况一般都是采用for循环读取
"""
文件操作模式
t 文本模式
1.默认的模式
r w a >>> rt wt at
2.该模式只能操作字符串(文本)
3.该模式必需要指定encoding参数
4.该模式所有操作都是以字符串基本单位(文本)
b 二进制模式
1.该模式可以操作任意类型文件
2.该模式所有操作都是以bytes类型(二进制)基本单位
3.该模式不需要指定encoding参数
rb wb ab
二进制读写操作
with open(r'a.txt', 'rb') as f:
print(f.read(3).decode('utf8'))
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read(3))
with open(r'a.txt', 'wb') as f:
f.write('123'.encode('utf8'))
"""
read() 括号内可以放数字
在t模式下表示字符个数
在b模式下表示字节个数
英文字符统一使用bytes来表示
"""
文件内光标移动
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read())
f.seek(2, 0)
print(f.read())
with open(r'a.txt', 'rb', ) as f:
print(f.read())
f.seek(-3, 1)
print(f.read())
"""
控制文件内光标的移动 f.seek()
f.seek(offset,whence)
offset 表示位移量
始终是以字节为最小单位
正数从左往右
负数从右往左
whence表示模式
0:以文件开头为参考系
1:只支持b模式,以当前位置为参考系
2:只支持b模式,以文件末尾为参考系
"""
了解下文件的替换操作
# 如何将文件中的内容1修改为2
# 方式一 覆盖 缺点:麻烦
# with open(r'a.txt', 'r', encoding='utf8') as f:
# data = f.read()
# print(type(data))
# with open(r'c.txt', 'w', encoding='utf8') as f1:
# new_data = data.replace('1', '2')
# f1.write(new_data)
# 方式二 新建 缺点:同时存在两个文件
# import os
# with open('a.txt', mode='rt', encoding='utf-8') as read_f,\
# open('a.txt.swap', mode='wt', encoding='utf-8') as write_f:
# for line in read_f:
# write_f.write(line.replace('SB', 'usb'))
# os.remove('a.txt') # 删除原文件
# os.rename('a.txt.swap', 'a.txt') # 重命名文件
补充:练习!

1.注册登录
# 写一个注册登录表
# while True:
# print("""
# 1.用户注册
# 2.用户登录
# """)
# choice = input('请输入你的选择(q结束选择):').strip()
# if choice == 'q':
# print('结束')
# break
# elif choice == '1':
# # 1.获取用户用户名和密码
# user_name = input('请输入需要注册的用户名:').strip()
# user_pass = input('请输入注册用户的密码:').strip()
# # 2.1.判断用户名是否已存在
# user_info = '%s|%s\n' % (user_name, user_pass)
# with open(r'D:\pyt.hc\day09文件\a.txt', 'r', encoding='utf8') as f1:
# # 2.2.循环读取每一行用户数据
# for line in f1:
# # 2.3.获取每一行数据中的用户名
# username, pwd = line.split('|')
# # 2.4.判断用户名是否一致
# if user_name == username:
# print('用户已存在')
# break
# else:
# # 3.文件操作 写入数据
# with open(r'D:\pyt.hc\day09文件\a.txt', 'a', encoding='utf8') as f:
# f.write(user_info)
# print('用户%s注册成功' % user_name)
# elif choice == '2':
# # 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
# user_login = input('输入需要登录的用户账号:').strip()
# pass_login = input('输入需要登录的用户的密码:').strip()
# # 2.获取文件内真实的用户数据
# with open(r'D:\pyt.hc\day09文件\a.txt', 'r', encoding='utf8') as f:
# for line in f:
# 3.切割字符串获取真实的用户名和密码
'''注意密码末尾有\n'''
# username, pwd = line.split('|')
# # 4.比对用户名和密码是否正确
# if user_login == username and pass_login == pwd.strip('\n'):
# print('sucess')
# break
# else:
# print('false')
# else:
# print('暂未开放次功能')
一个简易的拷贝工具(支持所有的文件类型)
# with open(input('请输入需要复制文件:').strip(), 'rb') as f: # 获取用户输入的文件地址,获取用户想要储存新文件的地址
# 用二进制的方式打开需要复制的文件
# path = f.read() # 将文件读取出来的内容赋值给copy_file
# with open(input('请输入需要拷贝到哪个目录:').strip(), 'wb') as f1: # 获取用户想要储存新文件的地址,用二进制的方式打开需要拷贝的文件,
# f1.write(path) # 将copy_file的内容写入到打开的拷贝文件中