day 09

文件处理

什么是文件处理

修改存储的信息

什么是文件

操作系统提供的虚拟概念,存储信息(用二进制存储信息)

操作文件的流程

1.打开文件

f = open

2.修改/读取文件

f.write()

3.保存文件

f.flush()

4.关闭文件

f.close()

文件的三种打开模式

读取

rt read_text 读文本内容 只读

写入(清空写入)

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

追加写入

at 只写入(追加写入)

打开文件的两种方式

t --》 文本;b --》二进制模式
这两个东西不单独使用,一般与r/w/a联用,不需要encoding

# b模式一般用于图片/音频/视频的保存

# w和a模式可以自动创建文件

绝对路径和相对路径

绝对路径

从盘符开始

相对路径

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

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

文件的高级运用

三种新的模式(可读又可写),尽量不要使用

r只读/w清空写入/a追加写入 --》要么只读,要么只写

假设一个文件即可读又可写,假设写需要10s,读需要5s

针对test.py,我们要写入一个国字,需要10s

过了1s,我们读了这个文件,5s过后,我们看到文件只有一个中字

感觉自己没写入,你会再一次写入一个国字(基于前面一个字是中字)

4s过后,第一个的写入成功了,文件变成 中国 了

再过6s,第二次写入一定失败

以前就发生过(现在的电脑牛逼了,所以不会有这种事发生,但是还是有一定概率的)

可写可读 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进制位组成一个字符(针对中文,英文是一个字节一个字符)
(00000000-->一个字节 00000000 00000000) --> 一个字符,对应三个字节,对应一个中文 --> utf8

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

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相当于当前文件所在位置;2相当于文件末尾
    fr.seek(3, 0)  # 0从开头
    # print(fr.read().decode('utf8'))
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:
            print('登录成功')
            break
    else:
        print('登录失败')
            
        

文件的修改

文件没有修改只有覆盖

with open('test.py','r',encoding='utf8')as fr,\
  open('test_new.py','w',encoding='utf8')as fw:   #同时打开多个文件
  
  data = fr.read()
  data = data.repalce('se','sb')
 
  fw.write(data)
  import os 
  
  os.remove('test.py')
  os.rename('test_new.py','test.py')

转载于:https://www.cnblogs.com/colacheng0930/p/11544628.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值