【笔记】2022.4.28 文件操作

1. 文件操作

操作文件内容


1.1 数据持久化

程序中的数据默认保存在运行内存中,保存在运行内存中的数据在程序运行结束后会自动销毁

如果数据保存在硬盘中,数据会一直存在,直到主动删除或者磁盘损坏

数据持久化:指的是以文件为单位将数据保存到硬盘中(将数据保存到文件中,就是将数据保存到硬盘中)

问题(1):怎么将程序中的数据保存到文件中?

问题(2):怎么将文件中的数据拿到程序中使用?


1.2 文件操作

文件操作基本流程:第一步:打开文件 -> 第二步:操作文件(读操作、写操作) -> 第三步:关闭文件


1.2.1 打开文件

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

参数说明:

a. file:需要打开的文件的路径

b. mode:文件打开方式(决定打开文件后能干什么;决定操作文件的时候对应的数据的类型)

同时给两组值:

第一组值:决定打开文件后能干什么:是能读,还是能写

​ r:只读

​ w:只写;打开的时候会清空原文件

​ a:只写;打开的时候会保留原文件内容

注意:如果以读的方式打开一个不存在的文件程序会报错,以写的方式打开不会报错并且会自动创建这个文件

第二组值:决定操作数据的类型:是字符串(str)类型还是二进制(bytes)类型

​ t:读写的数据的类型必须是字符串(不选,默认就是t)

​ b:读写的数据的类型必须是二进制

赋值方式:每一组值只能选一个,第一组值必须选,第二组值可以不选,不选就相当于选的’t’

例如:‘rt’、‘tr’、‘r’、‘rb’、‘w’、‘wb’、‘bw’

注意:二进制文件(图片、视频、音频、zip、pdf等)必须以’b’的方式打开,文本文件’t’和’b’都可以

RIGHT Example :

# --------r只读----------
f = open('test/demo.txt', 'r')
f.read()
# f.write('abc')								# 报错

# --------a只写,保留原文件内容---------
f = open('test/demo.txt', 'a')
# f.read()										# 报错
f.write('abc')

# --------w只写,清空原文件内容---------
f = open('test/demo.txt', 'w')
# f.read()										# 报错
f.write('abc')

# --------文件不存在的情况---------
# 读的方式打开不存在的文件会报错
# f = open('test/teacher.txt', 'r')             # 报错

# 写的方式打开不存在的文件不会报错,并且会自动创建这个文件
f = open('test/teacher2.txt', 'w')
f = open('test/teacher3.txt', 'a')

# 如果是文件夹不存在,写的方式打开还是会报错
# f = open('files2/teacher2.txt', 'w')			# 报错

# --------t对应的数据是字符串---------
f = open('test/demo.txt', 'rt')
result = f.read()
print(result, type(result))     # abc <class 'str'>
print(result.upper())           # ABC

f = open('test/demo.txt', 'rb')
result = f.read()
print(result, type(result))     # b'abc' <class 'bytes'>

f = open('test/demo.txt', 'at')
f.write('hello')

f = open('test/demo.txt', 'ab')
# f.write('hello')              # 报错

1.2.2 操作文件

(1)读操作:文件对象.read()

(2)写操作:文件对象.write(需要写入文件的数据)


1.2.3 关闭文件

文件操作完成后,必须关闭文件

文件对象.close()


1.2.4 数据持久化的方法

APPLICATION 1 写入一个程序统计当前程序运行的次数:

import os


def count_run(f):
    def new_f(*args, **kwargs):
        result = f(*args, **kwargs)
        if os.path.exists('test/run_count.txt'):
            pass
        else:
            file_count = open('test/run_count.txt', 'w')
            file_count.write('0')
        file_count = open('test/run_count.txt', 'r')
        count_f = int(file_count.read()) + 1
        file_count = open('test/run_count.txt', 'w')
        file_count.write(str(count_f))
        file_count.close()
        return result

    return new_f


if __name__ == '__main__':
    @count_run
    def sum_num(num1, num2):
        return num1 + num2


    print(sum_num(1, 2))

APPLICATION 2 图片文件的读写:

with open('celeste.png', 'rb') as f1:
    result = f1.read()
    print(result)

# 模拟图片的下载(图片二进制写入本地文件)
with open('c2.png', 'wb') as f2:
    f2.write(result)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sprite.Nym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值