目录
文件处理
什么是文件处理
修改存储的信息
什么是文件
操作系统提供的虚拟概念,存储信息(用二进制存储信息)
操作文件的流程
打开文件
①文件路径②打开模式,w--》write③
f = open(r'C:\Users\qndn\PycharmProjects\untitled4\day20\01 文件处理.py','w',encoding='utf8')
修改/读取文件
f.write(''' 孩儿立志出湘关,学不成名誓不还 埋骨何须桑梓地,人生无处不青山 ''')
保存文件
f.flush() # 快速保存,你可以不适用
关闭文件
f.close()
文件的三种打开模式
读取/清空写入/追加写入
读取
rt --》read_text 读文本内容 只读
f = open(r'D:\上海python12期视频\python12期视频\day 09\test.py', 'rt', encoding='utf8') f.write('slkdjfklj') data = f.read() print(data) print(f.readable()) # 判断是否可读 print(f.writable()) # 判断是否可写 data = f.read() # 读取所有文本内容 print(data) # 仅作了解 # print(f.readline()) # 一行一行读取 # print(f.readlines()) # 读取所有行放入列表 # 一筐鸡蛋 # for i in f.read(): # 循环出一个个字符 # print(i) # for i in f: # 循环出一行行 # 节省内存 # 老母鸡下蛋 # print(i) # 文本读一行少一行,每一行末尾默认有一个换行 # for i in f: # print(i)
清空写入
wt:只写(w空空文件后写入),不可读
# 仅作了解 # f.writelines(['abc', 'edf', 'gbk']) # 自动拼接列表元素,一行写入
追加写入
at:只写入
打开文件的两种方式
t-->文本;b-->二进制模式:这两种东西不单独使用,一般与r/w/a联用,不需要coding
b模式一般用于图片/音频/视频的保存
w和a模式可以自动创建文件
绝对路径和相对路径
文件的路径
文件在硬盘的地址
绝对路径
从盘符开始 D:
相对路径
执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下
项目尽量用相对路径
with管理文件上下文
with提供一个自动关闭文件(解除了操作系统的占用)
with open('test.py', 'r', encoding='utf8') as f: #在这个缩进下不会关闭文件,在这个缩进下对文件操作 data = f.read() print(data) # 关闭文件(操作系统),没有关闭python、内存中的文件 print(f) # 只涉及python # print(f.read()) # 设计操作系统,报错
文件的高级应用
全部仅作了解
三种新的方式(可读又可写),尽量不要使用
可写可读 r+
with open('test.py', 'r+', encoding='utf8') as fr: # print(fr.readable()) # print(fr.writable()) fr.write('高级') # 光标在文件头部,覆盖后面的字符
可写可读 w+
和 w 没有任何区别
with open('test.py', 'w+', encoding='utf8') as fw: print(fw.readable()) print(fw.writable())
可写可读 a+
a模式默认光标在尾部
with open('test.py','a+',encoding='utf8') as fw: print(fw.readable()) print(fw.writable()) fw.seek(0,0) print(fw.read())
需要了解的
8个二进制位为一个字节,3个8进制位组成一个字符(针对中文,英文是一个字节一个字符)
seek
with open('test.py', 'rb') as fr: fr.seek(5) # 移动了3个字节,一个中文,默认从开头开始 print(fr.read()) print(fr.read().decode('utf8'))
whence
规定只有0,1,2三种模式 # 0相当于文件头开始;1相当于当前文件所在位置;相当于文件末尾
fr.seek(3, 0) # 0从开头 # print(fr.read().decode('utf8')) fr.seek(3, 1) print(fr.read().decode('utf8')) fr.seek(0, 2) print(fr.read())
tell
告诉你当前所在的位置
with open('test.py', 'rb') as fr: fr.seek(3, 0) print(fr.tell())
truncate
截断
with open('test.py', 'ab') as fa: fa.truncate(2)
read
移动光标(以字符为单位)
with open('test.py', 'r', encoding='utf8') as fr: print(fr.read(3)) # n表示n个字符,不加默认读取所有 # 中文和英文都属于一个字
登录注册
注册
count = 0 while count < 3: username_inp = input('请输入你的用户名:') pwd_inp = input('请输入你的密码:') re_pwd_inp = input('请在此输入你的密码:') if not pwd_inp == re_pwd_inp: print('两次密码输入不一致') count += 1 continue with open('user_info.txt', 'a', encoding='utf8') as fa: fa.write(f'{username_inp}:{pwd_inp}\n') # :表示用户名和密码的分割;|用户和用户之间的分割 fa.flush() break
登录
username_inp = input('请输入你的用户名:') pwd_inp = input('请输入你的密码:') with open('user_info.txt', 'r', encoding='utf8') as fr: for user_info in fr: username, pwd = user_info.split(':') if username.strip() == username_inp and pwd.strip() == pwd_inp: # strip可以去掉两端的换行符 print('登录成功') break # else: # continue # continue一般不写在最后一行 else: print('登录失败')
文件的修改
文件其实没有修改一说,只有覆盖
来源:http://www.cnblogs.com/Isayama/p/11545409.html