目录
一、文件编码
二、什么是文件
三、文件操作
1、打开文件 open()打开函数
2、读取文件
3、写入文件 f.write() 使用w模式
4、文件追加 类比文件写入,只是将‘w’-->‘a’
5、文件操作综合案例
一、文件编码
Thinking: 计算机只能识别 0和1,那么文本文件 如何被计算机识别存储在硬盘中?
利用编码技术(密码本)将内容翻译成0和1存入
编码技术:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容
计算机内有许多可用编码:
* UTF-8
* GBK
* Big5 等
不同的编码将内容翻译成二进制也是不同的
编码有许多,要正确使用编码才能进行正确的读写操作
UTF-8是目前比较通用的编码格式
总结以下两个问题
1、什么是编码?
编码就是一种集合规则,记录了内容和二进制之间进行相互转换的逻辑;编码有许多种,我们最常用的是UTF-8编码
2、为什么需要使用编码?
计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中。同时也需要编码将计算机保存的0和1,反向翻译回可以识别的内容。
二、什么是文件
文件是指一个
可以独立操作的程序,可以是文本、图片、声音、视频等,不同的文件可以用不同程序打开。操作系统以文件为单位管理磁盘中的数据。
三、文件操作
文件操作主要包括
打开、关闭、读、写等操作
1、打开文件 open()打开函数
在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件夹
语法:open(name,mode,encoding)
-
name: 是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
-
mode: 设置打开文件的模式(访问模式):只读、写入、追加等
-
encoding:编码格式(推荐使用UTF-8)
示例代码:
注意:此时的‘f’是‘open’函数的文件对象,对象是Python中一种特殊的数据类型,拥有属性和方法,可以使用对象.属性 或 对象.方法对其进行访问。后续会详细记录面向对象笔记。
mode 常用的三种基础访问模式
2、读取文件
1.读操作相关方法
1)read() 方法:
文件对象.read(num)
num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num就表示读取文件中所有的数据
2)readlines() 方法:
readline可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表其中每一行的数据一个元素。
3)readline() 方法:一次读取一行内容
4)for循环读取
文件行
5)close() 关闭文件对象
关闭对文件的占用。如果不调用close(),同时程序没有停止运行,那么这个文件将一直被Python占用
6)with open 语法:
with open(name,mode,encoding)as f:
f.readlines()
通过在with open的语句块中对文件进行操作,可以在操作完成后自动关闭close文件,避免忘记使用close()方法
操作汇总:
代码演示:
# 打开文件
f = open("D:\Test\Python_test.txt","r",encoding="UTF-8")
print(type(f))
# 读取文件 - read()
print(f"read读取10个字节结果是:{f.read(10)}")
print(f"read读取全部字节结果是:{f.read()}") # 连续调用read会从上一个read的结尾处开始
# 读取文件 - readlines()
lines = f.readlines() # 读取文件的全部行 封装到列表中
print(f"lines的对象类型是:{type(lines)}")
print(f"lines对象内容是:{lines}") # 文件读取就想有个小指针记录读取的位置
# 读取文件 - readline()
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行数据是:{line1}")
print(f"第二行数据是:{line2}")
print(f"第三行数据是:{line3}")
# for循环读取文件行
for line in f:
print(f"每一行数据:{line}")
# 文件的关闭 close()
time.sleep(30)
f.close()
# with open语法操作文件
with open("D:\Test\Python_test.txt","r",encoding="UTF-8") as f:
for line in f:
print(line)
3、写入文件 f.write() 使用w模式
注意:
-
直接调用write,内容并未真正写入文件,而是会积攒在程序内存中,称之为缓冲区
-
当调用flush的时候,才会真正将内容写入文件
-
这样做避免频繁操作硬盘导致效率下降
close()方法内置了flush() with open as f 包括了close()
w --如果文件不存在 会直接创建并写入内容;
# 打开一个并不存在的文件 --创建
with open('D:/Test/write.txt',"w",encoding='UTF-8') as f:
f.write("hello puuoo") # close()方法内置了flush()
如果文件存在则会清空原来的内容再写入
4、文件追加 类比文件写入,只是将‘w’-->‘a’
注意:
a模式,文件不存在会创建文件
a模式,文件存在会在最后追加写入文件
5、文件操作综合案例
完成文件备份案例
有一份账单文件,记录了消费收入
需求: