day15文件操作

01 数据持久化

1.计算机存储数据

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

2.数据持久化:将数据以文件的显示保存在硬盘中

怎么将程序中的数据保存到文件中?
怎么在程序中获取文件中的内容?

答案:文件操作

3.文件操作:操作文件内容

基本流程:打开文件 -> 文件读写操作 -> 关闭文件

  • 1)打开

    open(file, mode='r', *, encoding=None)      -       以指定的方式打开指定文件,返回一个文件对象
    
    参数1file       -       需要打开的文件路径(文件路径可以写绝对路径,也可以写相对路径)
                              绝对路径:文件在计算机中的全路径(windows从盘开始写的路径)
                              相对路径:在写文件路径的时候可以用'.'开头代表当前目录或者'..'开头代表当前目录的上层目录
                                      (当前目录指定是当前代码文件所在的文件夹)
                                      注意:如果要使用相对路径,被打开的文件必须放在工程中;
                                          如果路径是以'./'开头的, './'可以省略
                                          
    参数2:mode        -       文件打开方式,用来决定:打开文件之后能做什么(能读还是能写)、操作文件的时候数据对应的类型(是字符串还是二进制)
                              给mode赋值的时候需要两组值:
                              第一组:决定打开后能做什么对应的值
                                    r   -   只读;打开不存在的文件,会报错!
                                    w   -   只写;打开的时候会先清空原文件内容;打开不存在的文件不会报错,并且会自动创建这个文件
                                    a   -   只写;打开的时候不会清空原文件内容;打开不存在的文件不会报错,并且会自动创建这个文件
                              第二组:决定操作文件的时候数据的类型
                                    t   -   字符串
                                    b   -   二进制(bytes)
                                    
                              赋值的时候上面两组值每一组都必须选择一个(如果第二组值不选,就相当于选的是't'):
                              rt(tr)、rb(br)、r、wt、wb、w、at、ab、a
                            
    参数3:encoding    -       文本文件编码方式(只有在以t方式打开文件的时候,才需要设置encoding) 
                              一般赋值为'utf-8''gbk'也是一种常见的文件编码方式
                              utf-8: 文本数据在存储的时候,ascii表中符号用1个字节来存储,一个中文用3个字节存储。可以对任何符号编码
                              gbk:  文本数据在存储的时候,ascii表中符号用1个字节来存储,一个中文用2个字节存储。除了ascii表和中文以外不能对其他符号进行编码
                              
                              使用编码值的原则:存储数据的时候使用编码值要和获取数据的时候对应的编码值一致。
                                           
    
示例:
# 1. 路径的写法
# open(r'/Users/mac/work/lessons/Python2204/01语言基础/day15-文件操作/files/abc.txt')
# open('./files/abc.txt')
# open('./test.txt')
# open('../day15-文件操作/files/abc.txt')
# open('files/abc.txt')
# open('test.txt')


# 2. 打开方法
# =====r是只读=====
# f = open('./files/abc.txt', 'r')
# # f.read()
# # f.write('123')


# ====w是只写,并且会清空原文件====
# f = open('./files/abc.txt', 'w')
# # f.write('123')
# f.read()

# =====a是只写,不会清空原文件====
# f = open('./files/abc.txt', 'a')
# # f.write('123')
# f.read()


# ======t对应的类型是字符串=======
# f = open('files/abc.txt', 'r')
# result = f.read()
# print(type(result))      # <class 'str'>
#
# f = open('files/abc.txt', 'rt')
# result = f.read()
# print(type(result))      # <class 'str'>
#
# f = open('files/abc.txt', 'rb')
# result = f.read()
# print(type(result))      # <class 'bytes'>

# f = open('files/abc.txt', 'wb')
# f.write('100')


# 3. 设置encoding
# f = open('files/student.txt', 'w', encoding='utf-8')
# f.write('acb你好')
#
# f = open('files/student.txt', 'r', encoding='utf-8')
# print(f.read())
  • 2)文件读写操作
      1. 文件读操作:
        文件对象.read() - 获取整个文件内容(从读写位置开始,读到文件结束。读写位置默认在文件开头,随着读操作的进行读写位置会不断改变)
        文件对象.readline() - 获取一行内容(只能文本文件有效)
        文件对象.readlines() - 获取整个文件内容,返回一个列表,列表中的元素是每一行内容(只能文本文件有效)
      1. 文件写操作
        文件对象.write(数据)
        文件对象.writelines(列表)
示例:
# ======读操作=====
# f = open('test.txt', encoding='utf-8')
# result = f.read()
# print(result)
#
# print('------------------------------------华丽的分割线-----------------------------------')
# f.seek(0)               # 让读写位置移动到文件开头
# result = f.readline()
# print(result)
#
# result = f.readline()
# print(result)
#
# print('------------------------------------华丽的分割线-----------------------------------')
# result = f.read()
# print(result)
#
# print('------------------------------------华丽的分割线-----------------------------------')
# f.seek(0)
# result = f.readlines()
# print(result)


# =====写操作====
f = open('test.txt', 'a', encoding='utf-8')
f.write('abc')

f.writelines(['python\n', 'java\n', 'h5\n'])
  • 3)关闭文件:文件对象.close()

    # 文件对象.close()
    f.close()
    f.write('nxxxx')
    

02 文件操作实例

1.数据持久化步骤:

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

案例:
# 案例:写程序打印程序运行次
# 1)确定需要持久化的数据  - 运行次数

# 4)在程序中需要这个数据的时候从文件中获取这个数据
f = open('files/runCount.txt', encoding='utf-8')
count = int(f.read())
f.close()

count += 1
print(count)

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


# 练习:提示用户输入名字添加学生,添加完后打印已经添加过的所有的学生的名字
"""
# 第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+' ')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值