文件操作
1、数据持久化
计算机内存分为两种:运行内存、硬盘(磁盘)
保存在运行内存中的数据在程序运行结束后会自动销毁;保存在硬盘中的数据除非人为删除或者磁盘损坏否则会一直存在。
程序中数据默认是保存在运行内存中
数据持久化就将数据以文件的形式保存到硬盘中。(保存到硬盘中的数据才能做到这次运行程序产生的数据在下次运行程序的时候还能使用)
对程序中的数据做持久化的步骤
1)确定持久化对象(哪些数据需要持久化)
2)创建文件并确定文件默认内容
3)在程序中需要这个数据的时候从文件中读数据
4)在数据发生改变以后需要将最新的数据写入到文件中
2、文件操作
打开文件后,操作文件中的内容
文件操作基本流程:打开文件 —> 操作文件(读写操作) —> 关闭文件
1)打开文件
open(file, mode='r', *, encoding=None)—— 以指定的方式打开指定文件
file—— 需要打开的文件的路径(文件地址)
mode—— 文件打开方式(默认为rt)
encoding—— 文本编码方式(只有以t的方式打开文件的时候才考虑给encoding赋值)
file—— 需要打开的文件的路径(文件地址)绝对路径 —— 文件在计算机中的全路径(Windows电脑从盘名开始写)
相对路径 —— a.写路径的时候用.开头表示当前目录(当前写代码的文件所在目录) b.写路径的时候用..开头表示当前目录的上层目录
# 使用绝对路径
open(r'E:\千峰培训\Python_project\project\01语言基础\day13-文件操作\files\data.txt')
# 使用.对应的相对路径,'./' 可以省略
open('./files/data.txt')
# 使用..对应的相对路径
open('../day13-文件操作/files/data.txt')
mode—— 文件打开方式作用:a. 决定打开文件后是能读还是能写;b. 决定操作文件的时候数据是字符串还是二进制
对应值:
1)决定打开后是读还是写
r—— 只读(文件不存在会报错),
w—— 只写(先清空再写;如果文件不存在,自动创建文件),
a—— 只写(追加;如果文件不存在,自动创建文件)
2)决定操作文件的时候数据类型(str、bytes)
t(默认值)—— 字符串类型(操作文件的时候涉及到的数据必须是字符串,打开文本文件)
b—— 二进制文件(图片、视频、音频、PDF)注意: 给mode赋值的时候必须在两组中每一组选一个值(不写默认为
rt) (‘rt’、‘rb’、‘r’、‘wt’、‘wb’、‘w’、‘at’、‘ab’、‘a’)
# 1)r —— 只读
f = open('files/data.txt', 'r')
f.read()
f.write('xy') # 报错:io.UnsupportedOperation: not writable
# 2)w —— 只写,清空原文件
f = open('files/data.txt', 'w')
f.write('sdd')
f.read() # 报错:io.UnsupportedOperation: not readable
# 3)a —— 只写,追加
f = open('files/data.txt', 'a')
f.write('\nahshd')
f.read() # 报错:io.UnsupportedOperation: not readable
# 4)读的方式打开不存在的文件,会自动创建
# open('files/data1.txt', 'r') # 报错:FileNotFoundError: [Errno 2] No such file or directory: 'files/data1.txt'
open('files/data1.txt', 'w')
# 5)t是字符串
f = open('files/data.txt', 'rt')
result = f.read()
print(type(result)) # <class 'str'>
f = open('files/data.txt', 'at')
f.write('29')
# 6)b是二进制
f = open('files/data.txt', 'rb')
result = f.read()
print(type(result)) # <class 'bytes'>
f = open('files/data.txt', 'ab')
f.write(bytes('abc', encoding='utf-8'))
encoding—— 文本编码方式(只有以t的方式打开文件的时候才考虑给encoding赋值)不同的文本编码方式决定字符编码在保存的时候采用的字节数(大小)
1)常用文本编码方式:gbk—— 英文符号单字节、中文符号双字节
utf-8—— 英文符号单字节、中文符号三字节
2)使用原则:不同的时候操作同一个文件采用的编码方式必须一致(不一致可能乱码也可能直接报错)
f = open('files/data4.txt', 'w', encoding='gbk')
f.write('aaa更好回家')
f = open('files/data4.txt', encoding='gbk')
print(f.read())
f = open('files/data5.txt', 'w', encoding='utf-8')
f.write('aaa更好回家')
f = open('files/data5.txt', encoding='utf-8')
print(f.read())
2)操作文件
1)文件读操作
文件对象.read()—— 从读写位置开始,读到文件结尾(读写位置默认在文件开头)
文件对象.readline()—— 从第一行开头读到下一行开头2)文件写操作
文件对象.write(数据)
# 1)读操作
f = open('files/test1', 'rt', encoding='utf-8')
result = f.read()
print(result)
print('~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~')
# 移动读写位置到开头
f.seek(0)
result = f.read()
print(result)
print('~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~')
# 练习:读test1中的内容,一行一行的读,读完为止
f = open('files/test1', 'rt', encoding='utf-8')
while True:
result = f.readline()
if result == '':
break
else:
print(result, end='')
print('~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~')
# 写操作
f2 = open('files/data.txt', 'wt', encoding='utf-8')
f2.write('hello world ')
f2.write(str([10, 20, 30, 40]))
3)关闭文件
文件对象.close()
f = open('files/test1', 'rt', encoding='utf-8')
f.close()
f.read() # 报错:ValueError: I/O operation on closed file.
本文介绍了文件操作的基本概念及步骤,包括数据持久化的意义、文件的读写操作及不同打开模式的应用。通过实例展示了如何在程序中进行文件的读取和写入。
2192

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



