一.文件编码概念
1.编码技术
即翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容
图文演示:
计算机有许多可用编码:UTF-8(通用) GBK Big5等,不同的编码,将内容翻译成二进制也是不同的
要使用正确的编码,才能对文件进行正确的读写操作
二.文件的读取操作
1.什么是文件
2.文件操作三步走
1 打开文件
2 读写文件
3 关闭文件
3.open()函数
可以打开一个已存在的文件,或者创建一个新文件
语法:open(name,mode,encoding)
name:是要打开目标的文件名的字符串(可以包含文件所在具体路径)
mode:设置文件打开的模式(访问模式):只读(r),写入(w),追加(a)等
encoding:编码格式(推荐使用UTF-8)
如:
f = open("D:\cs.txt", 'r', encoding="UTF-8")
encoding用关键字传参是因为他不是在第三位,不能用位置传参,因为在encoding前还有一个buffering
def open(
file: _OpenFile,
mode: OpenTextMode = ...,
buffering: int = ...,
encoding: str | None = ...,
errors: str | None = ...,
newline: str | None = ...,
closefd: bool = ...,
opener: _Opener | None = ...,
) -> TextIOWrapper: ...
4.read()方法
语法:文件对象.read(num)
num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,就表示读取文件中所有的数据
f = open("D:\cs.txt", 'r', encoding="UTF-8")
print(f"{f.read(8)}")
5.readlines方法
可以按照行的方式将文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
注:读取文件的时候,只要打开了那个文件,因为来自同一个文件对象后面不管用什么方法,都是接续上一次读取文件的方法
f = open("D:\cs.txt", 'r', encoding="UTF-8")
print(f"{f.read(8)}")
print(f"{f.read()}")
lines = f.readlines()
print(lines)
在这个代码中,第二个读的指令是接着第一个读,最后一个lines的输出是个空列表
6.readline()方法:一次读取一个内容
f = open("D:\cs.txt", 'r', encoding="UTF-8")
for x in range(1, 3):
print(f"{f.readline()}")
f.close() # 关闭文件
7.for循环读取文件行
for x in open("D:\cs.txt", 'r', encoding="UTF-8"):
print(x)
每一个x临时变量,就记录了一行数据
8.close():关闭文件
如果不关闭文件,同时程序没有停止运行,那这个文件会被python程序一直占用
f = open("D:\cs.txt", 'r', encoding="UTF-8")
f.close() # 关闭文件
9.with open()语法:在操作之后自动关闭文件,避免忘记
f = open("D:\cs.txt", 'r', encoding="UTF-8")
with open("D:\cs.txt", 'r', encoding="UTF-8"):
for x in f:
print(x)
三.文件的写入
示例代码:
# 打开文件
f = open("D:\cs.txt", 'w', encoding="UTF-8")
# 文件写入
f.write("出必还愿")
# 内容刷新
f.flush()
f.close()
注:
直接调用write,内容并未写入文件中,而是会积攒在文件的内存中,称之为缓冲区
当调用flush的时候,内容会真正写入文件
这样做避免频繁操作硬盘,导致效率下降(攒一堆,一次性写入硬盘)
close内置了flush的功能,因此有close可以不需要flush
文件存在会将原文件的内容清空,再写入;文件不存在会将创建新文件,再写入
四.文件的追加写入
只需将”w”改为“a”模式,其他操作一样
文件存在会在原文件的内容后写入;文件不存在会将创建新文件,再写入