文章目录
第八章:
8.文件
8.1 文件的编码
编码:一种规则集合,记录了内容和二进制之间进行相互转换的逻辑。
编码存在意义:计算机只认识0和1,需要将内容翻译成0和1才能保存在计算机中,同时也需要编码将在计算机中保存的0和1,翻译会我们可以识别的内容。
计算机中有很多可用编码:如UTF-8、GBK、Big5等。
UTF-8是全球通用的编码格式,除非有特殊需要,不然一律按UTF-8格式进行文件编码。
8.2 文件的读取
三个基本操作:
-
打开文件
-
读写文件
-
关闭文件
8.2.1 open()打开函数
语法:文件对象 = open(name, mode, encoding)
name:要打开的目标文件名的字符串,可包含文件所在的具体路径
mode:设计打开文件的模式
encoding:编码格式
mode常用的三种基础访问模式:
模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件指针会仿在文件的开头。默认模式 |
w | 以写入方式打开文件,如果文件已经存在,会从头开始编辑,原有的内容会被覆盖,如果文件不存在,会创建新文件 |
a | 以追加方式打开文件,如果文件已经存在,新的内容会被写入已有内容之后,如果文件不存在,会创建新文件进行写入。 |
python
f = open("test.txt", "r", encoding="UTF-8")
print(type(f)) # <class '_io.TextIOWrapper'>
8.2.2读取函数
read()
read()语法:文件对象.read(num)
num:从文件中读取的数据的长度,如果没传入num,会读取文件中所有的数据
python
f = open("test.txt", "r", encoding="UTF-8")
print(f"从文件中读取2个字节的数据结果为:{f.read(2)}")
print(f"从文件中读取所有的数据结果为:{f.read()}")r)
readlines()
readlines语法:文件对象.readlines()
按照行的方式将整个文件的内容进行一次性读取,返回的是一个列表,每一行数据为一个元素。
python
f = open("test.txt", "r", encoding="UTF-8")
lines = f.readlines()
print(f"lines的内容为:{lines}")
print(f"lines的类型为:{type(lines)}") # lines的类型为:<class 'list'>
readline()
readline()语法:文件对象.readline()
一次读取一行内容
python
f = open("test.txt", "r", encoding="UTF-8")
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行的内容为:{line1}")
print(f"第二行的内容为:{line2}")
print(f"第三行的内容为:{line3}")
for循环读取文件行
语法:for line in 文件对象
python
for line in open("test.txt","r", encoding="UTF-8"):
print(line)
8.2.3 文件关闭函数
close()
语法:文件对象.close()
python
f = open("test.txt", "r", encoding="UTF-8")
f.close()
如果不调用close,同时程序并没有停止运行,该文件将一直被Python程序占用。
with open()
语法:with open(name, mode, encoding) as 文件对象
作用:在操作完成后自动关闭close文件。
python
with open("test.txt", "r", encoding="UTF-8") as f:
for line in f:
print(f"每一行数据是:{line}")
8.2.4 总结:
操作 | 功能 |
---|---|
文件对象 = open(name, mode, encoding) | 打开文件获取文件对象 |
文件对象.read(num) | 从文件中读取指定的数据长度,如果没传入num,会读取文件中所有的数据 |
文件对象.readline() | 读取一行 |
文件对象.readlines() | 读取全部行,得到列表 |
for line in 文件对象 | for循环文件行,一次循环得到一行数据 |
文件对象.close() | 关闭文件对象 |
with open() as f | 打开文件,在操作完成后自动关闭close文件。 |
8.3 文件的写入
write()语法:文件对象.write("写入的内容")
flush()语法:文件对象.flush()
直接调用write,内容并未真正写入文件中,会积攒在程序的缓冲区中,当调用flush时,内容才会真正写入文件中。close()内置了flush功能
python
f = open("test.txt", "w", encoding="UTF-8")
f.write("Hello Python!")
# f.flush()
f.close() # close内置了flush功能
8.4 文件的追加
通过a模式打开文件即可
-
a模式,文件不存在会创建新文件
-
a模式,文件存在的话,会在文化尾追加写入
python
f = open("test.txt", "a", encoding="UTF-8")
f.write("\nHello world")
f.close()
8.5 文件操作综合案例
文本文件内容如下:
name,date,money,level,type
小明,2002-10-04,5000,2,正式
小王,2005-08-05,3000,1,实习
小洪,2005-04-05,3500,1,实习
小李,2005-05-05,3500,1,实习
小黑,2003-05-07,5000,2,正式
小张,2004-03-10,4000,1,实习
小刘,2003-08-18,5000,2,正式
小美,2003-10-20,4500,2,正式
需求:将文件内标记为实习的数据行丢弃
python
fr = open("test.txt", "r", encoding="UTF-8")
fw = open("test.txt.bak", "w", encoding="UTF-8")
for line in fr:
line = line.strip()
if line.split(",")[4] == "实习":
continue
fw.write(line)
fw.write("\n")
fr.close()
fw.close()
"\n")
fr.close()
fw.close()