9.18 总结

一、文件处理:

什么是文件处理:修改存储的信息

什么是文件:操作系统提供的虚拟概念,存储信息(用二进制存储信息)

操作文件的流程

1.打开文件(格式:文件路径+打开模式+字符编码)

f=open(r'K:\Python课程\day8\01 文件处理.py','w',encoding='utf8')

2.修改/读取文件

f.write('''
孩儿立志出湘关,学不成名誓不还
埋骨何须桑之地,人生无处不青山
''')

3.保存文件

f.flush() #快速保存,可以不使用

4.关闭文件:Python通过操作系统操作文件

f.close() #告诉操作系统关闭文件

#import os
#os.remove(r'K:\Python课程\day8\01 文件处理.py')

二、文件的三种打开方式:

读取/写入/追加写入

1.读取:rt --》 read_text 读文本内容,只读

f=open(r'K:\Python课程\day8\test.py','rt',encoding='utf8')
f.write('sjswnsb')
data=f.read()  #读取所有文本内容
print(data)
print(f.readable())
print(f.writable()) #not writable

print(f.readline())  #一行一行读取
print(f.readlines())  #读取所有行加入列表

要循环读出文本内容

for i in f.read(): #循环出一个个字符
    print(i)
for i in f:  #循环出一行行,节省内存
    print(i)

文本读一行少一行,每一行末尾默认有一个换行

2.wt:只写(w清空文件后写入),不可读

f=open(r'K:\Python课程\day8\test.py','wt',encoding='utf8')  #清空文件
print(f.readable())  #False
print(f.writable())   #True
f.write('abc')  #写入abc

f.writelines(['abc','def','gbk']) #自动拼接列表元素,一行写入

3.at:只写入(追加写入)

f=open(r'K:\Python课程\day8\test.py','at',encoding='utf8')
print(f.readable()) #False
print(f.writable())  #True
f.write('中')
r--只读;w--清空写入;a--追加写入

encoding指定写入的编码格式

f=open(r'K:\Python课程\day8\test.py','at',encoding='gbk')
f.write('中')

encoding指定读文件的编码格式

f=open(r'K:\Python课程\day8\test.py','rt',encoding='gbk')
print(f.read)

打开文件的两种方式

  1. t-->文本;b-->二进制模式:这两个不单独使用,须和r\w\a,不需要encoding.
f=open(r'K:\Python课程\day8\test.py','rb')
print(f.read()) #运行结果,前面一个b然后引号
  1. b模式一般用于图片/音频/视频的保存
import requests
response=request.get('http://photocdn.sohu.com/20120708/Img347586981.jpg')
data=response.content  #拿到图片的二进制
print(data)
  1. w和a模式可以自动创建文件
f=open(r'K:\Python课程\day8\test.py','wb')
f.write(data)

三、绝对路径和相对路径

文件的路径:文件在硬盘的地址

绝对路径:从盘符开始,比如:K:\Python课程\day8\test.py

相对路径:执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下

写项目尽量常用相对路径:

f=open('test.py','r',encodng='utf8')
print(f.read())

f.close()

四、with管理文件上下文

with提供一个自动关闭文件(解除了操作系统的占用)

with open('test.py','r',encoding='utf8') as f:
    #print(f.read())
    #在这个缩进下不会关闭文件,在这个缩进下对文件操作
    data=f.read() #data放到Python的内存中
print(data)
#关闭文件(操作系统),没有关闭Python内存中的文件
print(f)  #只涉及Python
#print(f.read())  #涉及操作系统,报错

五、文件的高级应用

1.可读又可写(r+),尽量不要使用

with open('test.py','r+',encoding='utf8') as fr:
    print(fr.readable())
    print(fr.writable())
    fr.write('高级') #光标在文件头部,从左到右依次覆盖原有的字符,剩下的字符就剩下了

2.可写可读w+和w没有任何区别

with open('test.py', 'w+', encoding='utf8') as fw: #清空
    print(fw.readable())  #已经没有意义,读之前已经清空
    print(fw.writable())   

3.可读可写 a+ a模式默认光标在尾部

with open('test.py','a+',encoding='utf8') as fw:
    print(fw.readable())
    print(fw.writable())
    fw.seek(0,0)  #光标移动到首部再读
    print(fw.read())

综上:如果你真的有即可读又可写的需求,用两种不同的模式打开两次文件

4.光标的高级应用(移动光标)

8个进制位为一个字节,3个8进制位组成一个字符(针对中文,英文是一个字节一个字符)

(00000000-->一个字节 00000000 00000000) --> 一个字符,对应三个字节,对应一个中文 --> utf8

以下三种移动光标的位置(以字节/二进制为单位)

1.#seek (还得知道文本内容每个字符有几个字节)
with open('test.py', 'rb') as fr:   
    fr.seek(6)  #移动了3个字节,一个中文,默认从开头开始    
    #print(fr.read())    #读出来是二进制
    print(fr.read().decode('utf8'))  #转码

whence规定只有0,1,2 三种模式 .

0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾

#test内容:中国anajbs
fr.seek(3, 0)  # 开始跳过3个字节,然后开始寻找
print(fr.read().decode('utf8'))  #国anajbs
fr.seek(3, 1)   
print(fr.read().decode('utf8'))   #从'中'开始寻找,下面的内容跳过3个字节,然后开始寻找 结果是anajbs
fr.seek(0, 2)    
print(fr.read())  #读出为空
  1. tell : 告诉你当前所在位置
 with open('test.py', 'rb') as fr:
       fr.seek(3, 0)
       print(fr.tell()) #3
  1. truncate: 截断

    with open('test.py', 'ab') as fa:   
        fa.truncate(3) #中 
4.#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(':')
        print(user_info.split(':'))
        if username.strip()==username_inp and pwd.strip()==pwd_inp: #strip可以去掉两端的换行符
            print('登录成功')
            break
    else:
        print('登录失败')

七、文件的修改

文件没有修改,只有覆盖

缓存文件的原理:(同时打开多个文件)

with open('test.py','r',encoding='utf8') as fr,open('test1.py','w',encoding='utf8') as fw:
    #data=fr.read()
    #data=data.replace('sb','傻B')
    #fw.write(data)
    #大的文件也能修改
    for i in fr:
        i=i.replace('sb','傻逼')
        fw.write(i)
        fw.flush()  #
import os
os.remove('test.py')
os.rename('test1.py','test.py')

转载于:https://www.cnblogs.com/lidandanaa/p/11545334.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值