1.文件编码
编码技术即翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。
计算机中有许多可用编码: UTF-8 GBK Big5等等。
(我们可以使用系统自带的记事本,打开文件后,通过右下角即可看出文件的编码是什么)
其中,UTF-8是目前全球通用的编码格式,除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。
总结:计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中。 同时也需要编码, 将计算机保存的0和1,反向翻译回可以识别的内容。编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。
2.文件的读取
Ⅰ.文件即操作系统管理磁盘数据的单位。
内存中存放的数据在计算机关机后就会消失,要长久保存数据,就要使用硬盘、光盘、U 盘等设备,为了便于数据的管理和检索,引入了“文件”的概念。一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。
Ⅱ.文件的操作包含打开、读写和关闭。
①文件打开
在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件:
open(name, mode, encoding)
其中,name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
mode:设置打开文件的模式(访问模式):只读、写入、追加等。
encoding:编码格式(推荐使用UTF-8)
# 文件读取
f = open("C:\\Users\\藤原拓海のAE86\\Desktop\\choices\\夏令营&&预推免.txt", "r", encoding="UTF-8")
# open()这个内置函数的第三位参数并非encoding,故需要用关键字指定
print(type(f))
# 输出:<class '_io.TextIOWrapper'>
(补充:
在Python中,反斜杠 \
是转义字符。它用于表示特殊字符或者在字符串中插入特殊字符。例如:
\n
表示换行符。\t
表示制表符。\\
表示一个反斜杠字符本身。)
②文件读取
文件对象.read(num)
num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
# 文件打开
f = open("C:\\Users\\藤原拓海のAE86\\Desktop\\choices\\夏令营&&预推免.txt", "r", encoding="UTF-8")
# open()这个内置函数的第三位参数并非encoding,故需要用关键字指定
print(type(f))
# 文件读取
print(f.read())
# 输出:关注浙大海洋学院、东南机械学院、重大机械学院、湖大机械学院。
读取文件全部行,并封装到列表中:
文件对象.readlines()
# 文件打开
f = open("C:\\Users\\藤原拓海のAE86\\Desktop\\choices\\夏令营&&预推免.txt", "r", encoding="UTF-8")
# open()这个内置函数的第三位参数并非encoding,故需要用关键字指定
print(type(f))
# 文件读取
# print(f.read())
lines = f.readlines()
print(type(lines))
print(lines)
#输出: ['关注浙大海洋学院、东南机械学院、重大机械学院、湖大机械学院。']
这里需要注意,在文件读取时存在类似指针的东西跟随读取进度移动,故此处必须注释掉print(f.read()),否则指针已经移动到末尾的情况下无法继续读取。
一次读取 一行内容:
文件对象.readline()
# 文件打开
f = open("C:\\Users\\藤原拓海のAE86\\Desktop\\choices\\夏令营&&预推免.txt", "r", encoding="UTF-8")
# open()这个内置函数的第三位参数并非encoding,故需要用关键字指定
print(type(f))
# 文件读取
# print(f.read())
# lines = f.readlines()
# print(type(lines))
# print(lines)
content = f.readline()
print(f'第一行:{content}')
content = f.readline()
print(f'第二行:{content}')
"""
输出:
第一行:关注浙大海洋学院、东南机械学院、重大机械学院、湖大机械学院。
第二行:
"""
for循环读取文件行
# 文件打开
f = open("C:\\Users\\藤原拓海のAE86\\Desktop\\choices\\夏令营&&预推免.txt", "r", encoding="UTF-8")
# open()这个内置函数的第三位参数并非encoding,故需要用关键字指定
# for循环读取文件行
for line in f:
print(line)
# 输出:关注浙大海洋学院、东南机械学院、重大机械学院、湖大机械学院。
关闭文件对象
f.close()
最后通过close,关闭文件对象,也就是关闭对文件的占用,如果不调用close,同时程序没有停止运行,那么这个文件将一直被Python程序占用。被占用则意味着无法删除与修改,想必大家平时遇到过
值得一提的是,为了避免遗忘掉close方,可以通过在with open的语句块中对文件进行操作 ,在操作完成后自动关闭close文件。
with open("C:\\Users\\藤原拓海のAE86\\Desktop\\choices\\夏令营&&预推免.txt", "r", encoding="UTF-8") as f:
总结:
3.文件的写入
with open("C:\\Users\\藤原拓海のAE86\\Desktop\\读写文件.txt", 'w', encoding="UTF-8") as f:
f.write("hello world")
f.flush()
with open("C:\\Users\\藤原拓海のAE86\\Desktop\\读写文件.txt", 'r', encoding="UTF-8") as f:
print(f.read())
# 输出:hello world
注意:
直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
当调用flush的时候,内容会真正写入文件
这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)
close()方法,带有flush()方法的功能
对于写操作,文件如果不存在,使用”w”模式,会创建新文件;文件如果存在,使用”w”模式,会将原有内容清空。
4.文件的追加
with open("C:\\Users\\藤原拓海のAE86\\Desktop\\读写文件.txt", 'w', encoding="UTF-8") as f:
f.write("hello world ")
f.flush()
with open("C:\\Users\\藤原拓海のAE86\\Desktop\\读写文件.txt", 'a', encoding="UTF-8") as f:
f.write('追加hello world')
f.flush()
with open("C:\\Users\\藤原拓海のAE86\\Desktop\\读写文件.txt", 'r', encoding="UTF-8") as f:
print(f.read())
# 输出:hello world 追加hello world
注意:
a模式,文件不存在会创建文件
a模式,文件存在会在最后,追加写入文件