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)
713

被折叠的 条评论
为什么被折叠?



