第十三天 文件操作

1. 数据持久化

计算机存储空间分为:运行内存和磁盘两种。
程序中产生的数据默认都是保存在运行内存中,存储在运行内存中的数据在程序结束后会自动销毁。
如果将数据存储到磁盘中,那么数据除非手动删除或者磁盘损坏,否则会一直存在。磁盘存储数据的基本单位是文件。

数据持久化指的就是将程序中的数据以文件的形式保存到磁盘中。

a = 100
b = [‘abc’, ‘mn’, ‘xy’]

2. 常见数据持久化工具

数据库(.db、.sqlite)、json文件(.json)、xml文件(.xml)、plist文件(.plist)、普通文本文件(.txt)、
excel文件(.xls、.xlsx)、csv文件(.csv)

文件操作 - 操作文件内容

1. 文件操作基本流程

打开文件 -> 操作文件(读操作、写操作) -> 关闭文件

2. 打开文件

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

  1. 参数file - 字符串,文件路径,用来确定要打开的是哪个文件
    a.绝对路径:文件在计算机中的全路径
    b.相对路径:用.表示当前目录(当前目录指的当前代码文件所在的目录) - ./可以省略
    用…表示当前目录的上层目录
    注意:使用相对路径的时候必须保证文件在工程中

  2. 参数mode - 字符串,文件打开方式; 决定打开文件后能做什么(读or写?),决定操作文件的时候数据的类型(二进制or字符串?)
    第一组值: - 决定打开文件后能做什么(读or写?)
    r - 只读
    w - 只写;打开的时候会清空原文件(覆盖)
    a - 只写;打开的时候保留原文件内容(追加)
    第二组值: - 决定操作文件的时候数据的类型
    t - 字符串(str)
    b - 二进制(bytes)

             注意:a. 给mode赋值的时候必须在两组值中每一组选一个,如果第二组不选就相当于选的't'
             'r' == 'rt' == 'tr'
             'w' ==  'wt' == 'tw'
             'rb' == 'br'
             b. 所有的文件都可以以b的方式打开,但是只有文本文件才能用t打开
             c. 以读的方式打开一个不存在的文件程序会报错;
                以写的方式打开一个不存在的文件程序不会报错,并且会自动创建这个文件。
    
  3. encoding - 文本文件编码方式,使用的时候一般设置成 ‘utf-8’
    注意:a. 一般不需要设置这个值,默认和电脑默认编码方式一致。
    b. 如果是以b的方式打开文件,一定不能给encoding赋值

1)文件路径

open(r’/Users/yuting/lessons/Python2107/01语言基础/day14-文件操作/files/a.txt’, encoding=‘utf-8’)
open(r’./files/a.txt’, encoding=‘utf-8’)
open(r’./01review.py’, encoding=‘utf-8’)

open(’…/day14-文件操作/files/a.txt’)

2) 打开方式

a. r - 只读

f = open('./files/a.txt', 'r')
f.read()
f.write('MAM')        # io.UnsupportedOperation: not writable

b. w - 只写并且清空原文件

f = open('./files/a.txt', 'w')
f.write('ABC')
# # f.read()      # io.UnsupportedOperation: not readable

c. a - 只写,保留原文件内容

f = open('./files/a.txt', 'a')
f.write('Hello!')
# # f.read()      # io.UnsupportedOperation: not readable

d. t - 字符串

f = open('./files/a.txt', 'rt')
result = f.read()
print(type(result))     # <class 'str'>

e. b - 二进制

f = open('./files/a.txt', 'rb')
result = f.read()
print(type(result))     # <class 'bytes'>

# open('./files/b.txt', 'r')        # FileNotFoundError: [Errno 2] No such file or directory: './files/b.txt'
# open('./files/c.txt', 'w')
# open('./files/d.txt', 'a')

3. 操作文件

1)读操作
文件对象.read() - 从读写位置开始读到文件结尾(读写位置默认在文件开头, 一次读完)
文件对象.readline() - 从读写位置开始到一行结束(一次读一行,只支持文本文件)

2)写操作
文件对象.write(数据) - 将指定数据写入文件

1)读操作

f = open('files/a.txt', 'r')
result = f.read()
print(result)

print('----------------------------------------------')
f.seek(0)       # 将读写位置移动到文件开头
result = f.read()
print(result)

print('----------------------------------------------')
f.seek(0)

# result = f.readline()
# print(result)
#
# result = f.readline()
# print(result)

result = f.read().split('\n')
print(result)

2) 写操作

f = open('./files/a.txt', 'a')
nums = [10, 20, 30, 40]
f.write(str(nums))

4.关闭文件

文件对象.close()

f.close()

# f.write('ahjsgdfja ')       # ValueError: I/O operation on closed file.


def func1():
    f2 = open('files/a.txt')


result = open('files/a.txt').read()
print(type(result))

f = open('files/a.txt')
print(type(f))
result = f.read()
f.close()

1. 数据持久化的步骤

第一步:确定需要持久化的数据
第二步:创建合适的文件,并且确定文件的初始内容
第三步:程序中需要这个数据的时候,必须从文件中获取
第四步:当这个数据发生改变以后,必须将最新的数据更新到文件中

# 练习1:写一个程序打印当前程序运行的次数
num = int(open('files/count.txt').read())
num += 1
print(num)

open('files/count.txt', 'w').write(str(num))


# 练习2:每次运行程序输入一个学生的信息,输入完成后打印已经录入的所有学生的姓名
"""
请输入学生姓名: 小明
小明

请输入学生姓名: 小花
小明 小花

请输入学生姓名: 张三
小明 小花 张三
"""
# name = input('请输入学生姓名:')
# all_names = open('files/students.txt').read()
# all_names += name + ' '
# print(all_names)
# open('files/students.txt', 'a').write(f'{name} ')
# 练习3:每次运行程序输入一个学生的信息,输入完成后打印已经录入的所有学生的姓名
"""
[]
请输入学生姓名: 小明
['小明']

请输入学生姓名: 小花
['小明', '小花']

请输入学生姓名: 张三
['小明', '小花', '张三']
"""
name = input('请输入学生姓名:')
all_names = eval(open('files/students2.txt').read())    # type: list
all_names.append(name)
print(all_names)
open('files/students2.txt', 'w').write(str(all_names))

作业1:

请输入学生姓名: 小明
请输入电话: 110
{‘小明’: ‘110’}

请输入学生姓名: 小胡
请输入电话: 120
{‘小明’: ‘110’, ‘小胡’: ‘120’}

name = input('请输入学生姓名:')
tel = input('请输入电话:')
message = eval(open('message_stu.txt').read())  # type:dict
message.setdefault(name, tel)
print(message)
open('message_stu.txt', 'w').write(str(message))
while True:
    print('===============================')
    print('\t**欢迎来到洗浴保健管理系统**')
    print(
        '                 1.登               录\n                 '
        '2.注               册\n                 3.退               出')
    print('===============================')
    choice = input('请选择(1-3):')
    all_users = eval(open('file01.txt') .read())  # type:list
    all_keyword = eval(open('file02.txt').read())  # type:list
    if choice == '1':
        while True:
            users = input('请输入账号:')
            keyword = input('请输入密码:')
            if users in all_users:
                nums = all_users.index(users)
                if keyword == all_keyword[nums]:  # 验证账号对应的密码
                    print('登录成功!')
                    print('🌺🌺🌺欢迎你!6号技师已准备好!🌺🌺🌺')
                    break
                else:
                    print('密码错误!')
            else:
                print('该账号未注册!')
        break
    elif choice == '2':
        while True:
            users = input('请输入账号:')
            if users not in all_users:
                all_users.append(users)
                open('file01.txt', 'w').write(str(all_users))
                keyword = input('请设置密码:')
                all_keyword.append(keyword)
                open('file02.txt', 'w').write(str(all_keyword))
                print('注册成功!')
                break
            else:
                print('账号不符合要求,请重新注册!')
    else:
        print('已退出')
        break

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值