文件操作 & 编码
一:文件操作
python.txt文件
1, 文件路径:d:python.txt (绝对路径)
绝对路径:从根目录开始
相对路径:从当前位置开始
2. 编码方式:UTF-8 GBK等
3. 操作方式:只读,只写,追加,读写,写读
如:简单文件读取
绝对路径: f = open('d:python.txt',mode = 'r',encoding = 'UTF_8') content = f.read() print(content) f.close()
相对路径:(在同一个文件夹里) f = open('python.txt',mode = 'r',encoding = 'UTF_8') content = f.read() print(content) f.close()
注意:以什么方式储存的文件就要以什么方式打开
操作:
①只读;mode = 'r' 或者 mode = ‘ rb’
(r是以str的方式读出来;rb十一bytes方式读出来)(没有encoding)
rb的作用:打开图片,视频,写入,存入,上传下载都用rb
②只写:mode = 'w' 或者 mode = ‘ wb’
w :对于只写,没有此文件,就会创建,若有此文件先删除源文件的内容再写 f = open('文件名',mode = 'w',encoding = 'UTF_8') f.write('内容') f.close()
wb :以bytes写入,但显示出来得转化为UTf-8 f = open('文件名',mode = 'wb') f.write('内容'.encode(UTF-8)) f.close()
③追加:mode = 'a' 或者mode = ' ab'
原理:光标自动再原内容的末尾 a:f = open('文件名',mode = 'a',encoding = 'UTF_8') f.write('需要追加的内容') f.close() ab:f = open('文件名',mode = 'ab') f.write('内容'.encode(UTF-8)) f.close()
④读写:mode = 'r+' 或者mode = ' r+b'
如果在mode=‘r+’的模式下先写后读,则写入多少位从头开始占原来内容多少位。 读出来的是原来的没有被占的内容。 f = open('文件名',mode='rb',encoding='UTF-8') print(f.read()) f.write('加油') f.close()
⑤写读:mode = 'w+' 先把原文件内容删除,再写入,与‘w’的区别是‘w+’加上print(f.read())不会报错
功能详解:
f.read() #read读出来的都是字符,可选择读几个字符,如f.read(3)读前三个字符 f.seek() #按照字节定光标的位置;一个中文为三个字节;如f.seek(3)光标再第一个中文字符之后 f.tell() #告诉你光标的位置 f.readable() #是否可读,返回true或者false f.readline() #一行一行的读; f.readlines() #每一行当成列表中的元素,增加到列表中 f.truncate() #截取原文件的内容
补充:
①for line in f: print(line)把f中的内容都读出来
②f = open('文件名',mode = 'r+',encoding='utf-8') f.close()的另一种写法 with open('文件名',mode = 'r+',encoding='utf-8') as f: print(f.read())
用with的好处:自动关闭,不用写close();也可以同时打开多个文件
如:
with open('文件名',mode = 'r+',encoding='utf-8') as f,
with open('文件名',mode = 'w',encoding='utf-8') as f1:
相关操作
为啥要有文件处理:数据从内存到硬盘的过程
登陆注册:
要求:①注册②注册的用户名和密码写入到文件③登录时从文件取出用户名和密码来匹配输入的用户名和密码
④若匹配失败,有三次机会
username = input('请输入注册的用户名:') password = input('请输入注册的密码:') with open('登陆注册信息文件',mode = 'w',encoding = 'UTF-8') as f: f.write('{} {}'.format(username,password)) print('恭喜你,注册成功!') lis = [] i = 0 while i < 3: i += 1 uname = input('请输入用户名:') pword = input('请输入密码:') with open('登陆注册信息文件', mode='r', encoding='UTF-8') as f1: for line in f1: lis.append(line) if uname == lis[0].strip() and pword == lis[1]: print('登陆成功') else: print('账号或者密码错误')
修改文件:
文件不能修改,若非得修改,用replace,删除文件,重命名文件(实际是新文件替换旧文件)
with open('旧文件',encoding = 'utf-8') as f, with open('旧文件.bak',mode = 'w',encoding = 'utf-8') as f1: for line in f: if '要修改的内容' in line: line = line.replace('要修改的内容','新内容') f1.write(line) #写文件 import os os.remove('旧文件') #删除文件 os.rename('旧文件.bak','旧文件') #重命名