文件编码
计算机只能识别0和1,我们丰富的文本文件是使用编码技术将内容翻译成0和1存入的。
编码技术即翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。
计算机中有许多可用编码:
- UTF-8
- GBK
- Big5
- 等等
不同的编码,将内容翻译成二进制也是不同的。
UTF-8是目前全球通用的编码格式。
查看文件编码
可以使用Windows系统自带的记事本,打开文件后,即可看出文件的编码是什么(右下角)。
文件
内存中存放的数据在计算机关机后就会消失。要想长久保存数据,就要使用硬盘、光盘、U盘等设备。为了便于数据的管理和检索,引入了文件的概念。
一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。
在日常生活中,文件操作主要包括打开、关闭、读、写。
打开文件
在 python 中,使用 open 函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下。
oprn(name,mode,encoding)
- name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
- mode: 设置打开文件的模式(访问模式):只读、写入、追加等。
- encoding:编码格式(推荐使用 UTF-8)
模式
r:只读模式,指针会在文件的开头, 这是默认的。
w:写入模式,如果文件存在,则打开文件从头开始编辑,原有内容会被删除,如果不存在,创建新文件。
a:打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后,如果该文件不存在,创建新文件进行写入。
# 打开文件
f = open("D:/test.txt","r",encoding="UTF-8")
print(type(f))
# 读取文件 -read()
print(f"读取10个字节的结果:{f.read(10)}")
# 如果是同一个文件对象会在上一个读取后继续读取
print(f"read方法读取全部内容的结果是:{f.read()}")
f = open("D:/test.txt","r",encoding="UTF-8")
# 读取文件 -readlines()
lines = f.readlines()
print(f"lines对象的类型是:{type(lines)}")
print(f"lines对象的内容是:{lines}")
f = open("D:/test.txt","r",encoding="UTF-8")
# 读取文件 -readline()
line1 = f.readline()
line2 = f.readline()
print(f"第一行数据是:{line1}")
print(f"第二行数据是:{line2}")
f = open("D:/test.txt","r",encoding="UTF-8")
# for 循环读取文件行
for line in f:
print(f"每一行数据是:{line}")
# 文件的关闭 -close()
f.close()
# with open 语法操作文件
# 操作完会自动关闭文件
with open("D:/test.txt","r",encoding="UTF-8") as f:
for line in f:
print(f"每一行数据是:{line}")
写入
# 打开文件,不存在的文件
f = open("D:/test1.txt","w",encoding="UTF-8")
# write 写入
f.write("Hello World") # 内容写入到内存中
# flush 刷新
f.flush()
# close 关闭
f.close() # close 内置了 flush 方法
# 打开一个存在的文件
# 文件存在会清空文件的内容再写入
f1 = open("D:/test.txt","w",encoding="UTF-8")
# write 写入,flush 刷新
f1.write("金清泽真棒")
f1.flush()
# close 关闭
f1.close()
注意
- 直接调用 write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
- 当调用 flush 的时候,内容会真正写入文件
- 这样做事避免频繁的操作硬盘,导致效率下降(积攒一堆,一次性写磁盘)
追加写入
注意:
- a模式,文件不存在会创建文件
- a模式,文件存在会在最后,追加写入文件