15 -文件的读写操作

Day 15

一、数据持久化

** 怎么将程序中的数据保存在文件中?**
** 怎么在程序中获取文件中的内容?**
** 答案是 文件操作 **

1.计算机存储数据

  • 默认情况下程序中的数据是保存在运行内存中,当程序运行结束,在运存内存中保存的数据会自动销毁。
  • 如果希望在这次运行程序的时候,可以使用上一次运行程序产生的数据,就必须把数据保存在硬盘(磁盘)中。
  • 硬盘保存数据的最小单位是文件

2.数据持久化 – 将数据以文件的形式保存在磁盘中

  • 对文件进行保存读取一系列的文件操作

3.文件操作 - 操作文件的内容

  • 基本流程

打开文件 → 文件读写操作 → 关闭文件

二、 打开文件

  • open(file,mode=‘r’,*,encoding=None) --以指定方式打开指定文件,返回一个文件对象

  • 参数1 – file : 需要打开的文件路径(文件可以写绝对路径,也可以写相对路径)

    • 绝对路径:文件在计算机中的全路径(Windows从盘开始写的路径)
    • 相对路径:在写文件路径的时候可以用 ‘.’ 代表当前目录或者用用 '…'代表当前目录的上层目录(当前目录指定的是当前代码文件所在的文件夹)
    • 注意:如果要使用相对路径,被打开的文件必须放在工程中
    • 如果路径是以 ‘’.‘’ 开头 可以省略
  • 参数2 --mode:文件打开方式,用来决定打开文件能做什么(能读还是能写)、操作文件的时候数据对应的类型(是字符串还是二进制 )

  • 给 mode 赋值的时候需要两组值

  • 第一组 :决定打开后能做什么的值

    • r : 只读,打开不存在的文件会报错
    • w:只写 — 打开文件时,会清空掉原来文件中内容,打开不存在的文件会新建一个文件
    • a : 只写 — 追加写入,打开不会清空原文件,打开不存在的文件会新建一个文件
  • 第二组:决定操作文件的时候数据的类型

    • t:字符串
    • b:二进制(bytes)
  • 赋值的时候上面两组值每一组都必须选择一个(如果第二组值不选,就默认为 ‘’ t ‘’ )

  • 以只读的方式无法写入

f = open('./files/abc.py','r')
f.read()
f.write('123')  # 报错 io.UnsupportedOperation: not writable(不能写入)
  • 以只写的方式无法读
f = open('./files/abc.py','r')
f.write('123') 
f.read()  # 报错 io.UnsupportedOperation: not readable(不能读)
  • 参数3:encoding - - 文本文件编码方式(只有在文件以 t 方式打开的时候才需要设置encoding)一般赋值为 ’ utf-8 ',’‘gbk“ 也是一种常见的编码方式
    • ’ utf-8 ’ :在文本数据存储的时候,ascii表中的符号用一个字节来存储,一个中文用3个字节存储。可以对任何符号编码
    • ’ gbk ’ : 文本数据在存储的时候,acsii表中的符号用一个字节来存储,一个中文用2个字节存储。除了acsii表和中文以外不能存储其他字符
    • 使用编码原则:存储数据的时候要和使用编码值要和 获取数据的时候对应的编码值抑制

三、.文件的读写操作

1. 文件读操作

  • 文件.read() : 获取整个文件内容(从读写位置开始,读到文件结束。读写位置默认在文件开头,随着读操作的进行读写位置会不断改变)
  • 文件.readline() : 获取文件内容一行只对文本文件有效
  • 文件.readlines() :获取整个文本内容,内容以列表的形式返回 ,列表中的元素是每一行的内容对文本文件有效

2.文件的写操作

  • write
  • writerline

四、文件操作的应用

1.文件持久化的步骤

1)确定需要持久化的数据
2)创建保存需要持久化数据的文件
3)确定文件初始内容(就是需要持久化的数据的初始值)
4)在程序中需要这个数据的时候从文件中获取这个数据
5)在程序中修改数据后,必须将最新的数据写入到文件中

  • 练习:提示用户输入名字添加学生,添加完后打印已经添加过的所有的学生的名字
"""
# 第1次运行程序:
请输入你的名字: 小明
小明

# 第2次运行程序:
请输入你的名字:小花
小明 小花

# 第3次运行程序
请输入你的名字: 张三
小明 小花 张三

....
"""

# 1)确定需要持久化的数据  - 已经添加过的学生的名字
name = input('请输入你的名字:')

# 4)在程序中需要这个数据的时候从文件中获取这个数据
added_name = open('files/student.txt', encoding='utf-8').read() + name
print(added_name)

# 5)5)在程序中修改数据后,必须将最新的数据写入到文件中
f = open('files/student.txt', 'a', encoding='utf-8')
f.write(name+' ')

  • 作业:登录注册系统
f1 = open('./界面.txt', 'r', encoding='utf-8')
print(f1.read())
f1.close()
while True:
    # 登录、注册前预加载用户信息
    f2 = open('./用户信息.txt', 'r', encoding='utf-8')
    result = f2.readlines()
    print(result)
    f2.close()
    # 处理信息
    user_list = [i.replace('\n', '').split(',')[0] for i in result[1:]]
    password_list = [i.replace('\n', '').split(',')[1] for i in result[1:]]
    print(user_list, password_list)
    choice = input('请输入你的选择:')
    if choice == '1':
        username = input('请输入用户名:')
        password = input('请输入密码:')
        if username in user_list:
            index1 = user_list.index(username)
            if password == password_list[index1]:
                print('登录成功')
                break
            else:
                print('用户名或密码错误')
        else:
            print('用户名或密码错误')
    elif choice == '2':
        f3 = open('./用户信息.txt', 'a', encoding='utf-8')
        username = input('请输入用户名:')
        if username in user_list:
            print('用户名已存在')
        else:
            password = input('请输入密码:')
            f3.write('\n' + ','.join([username, password]))
            f3.close()
            print('注册成功')
    elif choice == '3':
        print('退出系统')
        break
    else:
        print('输入错误,请重新输入!')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值