# 2 可用with同时打开多个文件,用逗号分隔开即可 withopen('a.txt','r')as read_f,open('b.txt','w')as write_f: data = read_f.read() write_f.write(data)
指定操作文本文件的字符编码
1 2 3
f = open(...)是由操作系统打开文件,如果打开的是文本文件,会涉及到字符编码问题,如果没有为open指定编码,那么打开文本文件的默认编码很明显是操作系统说了算,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在Linux下还是utf-8 这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开
f = open('a.txt','r',encoding = 'utf-8')
文件的操作模式
控制文件读写操作的模式
1 2 3
r(默认的):只读 w:只写 a:只追加写
案例一:r模式的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# r只读模式:在文件不存在时则报错,文件存在文件内指针直接跳到文件开头
withopen('a.txt',mode='r',encoding='utf-8')as f: res = f.read() # 会将文件的内容由硬盘全部读入内存,赋值给res # 练习:实现用户认证功能 inp_name = input('请输入名字: ').strip() inp_pwd = input('请输入密码').strip() withopen(r'db.txt',mode = 'r', encoding = 'utf-8')as f: for line in f: # 把用户输入的名字与密码与读出的内容做比对 u, p = line.strip('\n').split(':') if inp_name == u and inp_pwd == p: print('登录成功') break else: print('账户名或密码错误')
案例二:w 模式的使用
1 2 3 4 5 6 7 8
w只写模式: 在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头
withopen('b.txt',mode='w',encoding='utf-8') as f: f.write('你好\n') f.write('我好\n') f.write('大家好\n') f.write('111\n222\n333\n')
src_file=input('源文件路径: ').strip() dst_file=input('目标文件路径: ').strip() withopen(r'%s' %src_file,mode='rb') as read_f,open(r'%s' %dst_file,mode='wb') as write_f: for line in read_f: # print(line) write_f.write(line)
withopen('db.txt',mode='rt',encoding='utf-8') as read_f,\ open('.db.txt.swap',mode='wt',encoding='utf-8') as wrife_f: for line in read_f: wrife_f.write(line.replace('SB','kevin'))