文件的操作
文件读写模式
-
只读模式(r)
只读模式用于打开文件但只能读取内容,不能进行编写
文件路径若不存在则会报错,路径存在则读取文件内容
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read()) # run:生活就像海洋,只有意志坚定的人才能到达彼岸
- 只写模式(w)
只写模式用于编写文件内容,但无法读取编写文件内容
文件路径若不存在,程序会自动创建这个路径文件,在新文件里添加新的内容
with open(r'b.txt', 'w', encoding= 'utf8') as f:
f.write('阿瓦达索命')
with open(r'b.txt', 'r', encoding='utf8') as f:
print(f.read()) # run:阿瓦达索命
文件路径若存在,程序会自动清空该文件,在将新内容输入文件(使用'w'模式时要小心,确认文件内没有重要数据)
with open(r'b.txt', 'w', encoding= 'utf8') as f:
f.write('阿瓦达索命')
with open(r'b.txt', 'r', encoding='utf8') as f:
print(f.read()) # run:阿瓦达索命
- 只追加模式
只追加模式只会在文件内容的末尾添加新的内容,同样无法读取文件内容
文件路径若不存在,程序会自动创建这个路径文件,然后在新文件里添加新的内容
with open(r'c.txt', 'a', encoding='utf8') as f:
f.write('阿瓦达索命')
文件路径若存在,程序会在文件内容的末尾添加新的内容
with open(r'c.txt', 'a', encoding='utf8') as f:
f.write('阿瓦达索命')
with open(r'c.txt', 'r', encoding='utf8') as f:
print(f.read()) # run:阿瓦达索命阿瓦达索命
文件的操作模式
- 文本模式
1.文本模式是默认模式,我们使用时可以直接用简写:
简写 全写 模式
r rt 只读
w wt 只写
a at 只追加
2.文本模式只能操作文件
必须指定encoding参数
读写只能用字符串类型
- 二进制模式
1.二进制模式不是默认模式,我们使用时需要写全:
全写 模式
rb 只读
wb 只写
ab 只追加
2.可以操作各种类型的文件
不需要指定encoding参数
读写都以bytes为单位
文件的操作方法
-
read()
一次性读取文件,读完后会将光标停留在末尾,继续读则是空
如果文件太大不推荐用这种方法,内存顶不住
with open(r'c.txt', 'r', encoding='utf8') as f:
print(f.read())
'''run:
阿瓦达索命
阿瓦达索命
阿瓦达索命'''
-
readline()
一次读一行内容
with open(r'c.txt', 'r', encoding='utf8') as f:
print(f.readline()) # run:阿瓦达索命
-
readlines()
按行的方式一次性读取,并组成列表返回
with open(r'c.txt', 'r', encoding='utf8') as f:
print(f.readlines()) # run:['阿瓦达索命\n', '阿瓦达索命\n', '阿瓦达索命']
-
readable()
判断当前文件是否可读
with open(r'c.txt', 'r', encoding='utf8') as f:
print(f.readable()) # run:True
with open(r'c.txt', 'a', encoding='utf8') as f:
print(f.readable()) # run:False
-
writable()
判断当前文件是否可写
with open(r'c.txt', 'r', encoding='utf8') as f:
print(f.writable()) # run:False
with open(r'c.txt', 'a', encoding='utf8') as f:
print(f.writable()) # run:True
-
write()
填写要输入文件的内容
with open(r'a.txt', 'a', encoding='utf8') as f:
f.write('阿瓦达索命')
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read()) # run:阿瓦达索命
-
writelines()
支持填写容器类型(内部可以存放多个数据值的数据类型)多个数据值
-
flush()
将内存中的文件数据储存到硬盘(相当于按ctrl+s)
作业1
id1 = input('要从哪里拷贝>>>:').strip() # 输入拷贝源路径
with open(id1, 'rb') as f:
data = f.read() # 将内容取出
id2 = input('要拷贝到哪里去>>>:').strip() # 输入目标路径
with open(id2, 'wb') as b:
b.write(data) # 将内容输入
作业2
while True:
print('''
注册新用户输入1
登录账号输入2
''')
func_id = input('请输入指令>>>:').strip() # 输入指令
if func_id == '1':
name = input('请输入用户名>>>:').strip()
password = input('请输入密码>>>:').strip()
with open(r'c.txt', 'r', encoding='utf8') as a:
data1 = a.read() # 将文件内容取出
if name in data1: # 判断输入的新用户是否以存在于文件中
print('用户名已存在')
continue # 用户名以存在则重新输入
data = f'{name}|{password}\n' # 不存在则将新用户名字密码组合
with open(r'c.txt', 'a', encoding='utf8') as f:
f.write(data) # 将新用户信息输入文件中
elif func_id == '2':
name2 = input('请输入用户名>>>:').strip()
password2 = input('请输入密码>>>:').strip()
with open(r'c.txt', 'r', encoding='utf8') as b: # 将文件内容取出
for i in b: # 将文件内容以用户信息组依次循环
name_info, password_info = i.split('|') # 将用户信息组的用户名好密码分开赋值
if name2 in name_info and password2 in password_info: # 判断输入的用户名好密码在不在文件内容中
print(f'欢迎{name2}登录!') # 在则登录成功
break
else:
print('账号或密码错误') # 不在则提示错误
continue
else:
print('指令错误') # 提示指令错误

浙公网安备 33010602011771号