文件操作步骤:打开文件 → 操作文件(读、写)→ 关闭文件
一、打开文件
open(file,mode,encoding=None) → 以指定的方式打开指定的文件
1、file → 文件路径(文件在计算机中的位置地址)
绝对路径:文件在计算机中的全路径(windows从盘开始写,mac从系统根目录开始写)
open(r'D:\01 语言基础\day13-模块和异常\02作业.py')
相对路径:
用.表示当前目录(当前目录指当前代码文件所在文件夹)
用..表示当前目录的上层目录
注意:如果想要使用相对路径,必须将需要操作的文件直接或者间接放到工程目录中如 果路径以”./“开头,”./”可以省略
open(r'./02作业.py')
open('../day13-模块和异常/02作业.py')
2、mode → 文件打开方式(决定打开文件能做什么,操作文件的时候涉及的数据的数据类型)
第一组值:决定打开文件以后能做什么(能读还是能写)
r → 只读;如果文件不存在会报错
w → 只写:打开文件时会清空原文件;如果文件不存在不会报错,会自动创 建对应的 文件
a → 只写:打开文件时不会清空原文件,接着原文件继续写
第二组值:决定操作文件的时候涉及的数据的数据类型
t → 字符串(str)
b → 二进制数据(bytes)
给参数mode赋值时需要在上面的两组值中每一组选一个,但是没有先后顺序的要求
3、encoding → 文本文件编码方式
不同的文本文件编码方式在保存同一个字符编码值的时候字节数可能不一样
(1)只有以’t‘的方式打开文件的时候才能给encoding赋值
(2)如果没有给encoding赋值,文本文件编码方式和计算机保持一致
(3)给encoding赋值的要求:打开文件写入数据的编码方式和读数据的时候对应的编码方式 必须一致
二、文件写操作
1、文件读操作
文件对象.read() → 获取整个文件内容(从读写位置开始获取到文件结尾)
文件对象.readline() → 获取一行内容(从读写位置开始获取到一行结束)
注意:打开文件的时候读写位置在文件的开头;随着操作的进行,文件的读写位置会改变
文件对象.seek(0) → 设置读写位置到文件开头
2、文件写操作
文件对象.write(数据) → 写入文本
三、关闭文件
1、手动关闭文件
文件对象.close()
2、自动关闭文件
with open() as 文件对象:
代码块
离开代码段文件自动关闭
四、保存文件(数据持久化)
1、什么是数据持久化
程序中定义变量保存数据默认是保存在运行内存中,在程序运行结束后会自动释放。保存到硬盘中的数据,除非人为删除,否则一直存在
数据持久化:将程序中的数据以文件的形式保存到硬盘中
2、数据持久化流程
第一步:确定需要持久化的数据
第二步:创建文件,确定文件初始内容
第三步:在程序中需要被持久化的数据的时候从文件中读数据
第四步:当需要持久化数据发生变化的时候把最新的值更新到文件中
# 案例:写程序答应程序执行的次数
# 第一步:运行次数
# 第二步:什么文件(txt文件)、叫什么名字(count.txt)、文件初始内容(可以利用需要持久化的数据的初始值来确定)
# 获取上一次运行程序的时候的次数
with open('count.txt','r',encoding='utf-8') as f:
count = int(f.read())
# 让次数加1
count += 1
print(count)
with open('count.txt','w',encoding='utf-8') as f:
f.write(str(count))
# 练习:提示输入需要添加用的名字,然后将所有已经添加过的名字打印出来(每次运行程序只能添加一个名字)
"""
请输入添加的用户名字: 张三
已经添加过的所有用户:张三
请输入添加的用户名字: 李四
已经添加过的所有用户:张三 李四
请输入添加的用户名字: 老王
已经添加过的所有用户:张三 李四 老王
....
"""
# name = input('请输入名字:')
# with open('name.txt', 'a', encoding='utf-8') as f:
# f.write(str(name))
# with open('name.txt', 'r', encoding='utf-8') as f:
# names = f.read()
# print(names)
# 需要持久化的数据:输入用户名
# 文件:name.txt
# 提示输入名字
input('请添加用户名:')
# 获取之前已经输入过所有的名字
f = open('name.txt','r',encoding='utf-8')
name = f.read()
f.close()
# 打印名字
print(f'{name}{value}')
# 更新文件
f = open('name.txt','a',encoding='utf-8')
f.write(value)
f.write(' ')
f.close()