045 文件的使用
目录
一、概述
- 文件的类型
- 文件的打开和关闭
- 文件内容的读取
- 数据的文件写入
二、文件的类型
2.1 文件的理解
文件是数据的抽象和集合
- 文件是存储在辅助存储器上的数据序列
- 文件是数据存储的一种形式
- 文件展现形态:文本文件和二进制文件
文本文件 vs. 二进制文件
- 文件文件和二进制文件只是文件的展示方式
- 本质上,所有文件都是二进制形式存储
- 形式上,所有文件采用两种方式展示
2.2 文本文件
文件是数据的抽象和集合
- 由单一特定编码组成的文件,如UTF-8编码
- 由于存在编码,也被看成是存储着的长字符串
- 适用于例如:.txt文件、.py文件等
2.3 二进制文件
文件是数据的抽象和集合
- 直接由比特0和1组成,没有统一字符编码
- 一般存在二进制0和1的组织结构,即文件格式
- 适用于例如:.png文件、.avi文件等
2.4 文本文件 vs. 二进制文件
"中国是个伟大的国家!"
- 文本形式:
中国是个伟大的国家!
- 二进制形式:
b'\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'
2.5 f.txt文件保存
f.txt文件保存: "中国是个伟大的国家!"
# 文本形式打开文件
tf = open("f.txt", "rt")
print(tf.readline())
tf.close()
# 二进制形式打开文件
bf = open("f.txt", "rb")
print(bf.readline())
bf.close()
三、文件的打开和关闭
3.1 文件的打开关闭
文件处理的步骤: 打开-操作-关闭
# 读文件
a.read(size)
a.readline(size)
a.readlines(hint)
# 写文件
a.write(s)
a.writelines(lines)
a.seek(offset)
3.2 文件的打开
3.3 文件路径
文件路径和名称:"D:/PYE/f.txt" 或 "D:\PYE\f.txt"
源文件同目录可省路径:"./PYE/f.txt" 或 "f.txt"
3.4 打开模式
文件的打开模式 | 描述 |
---|---|
'r' | 只读模式,默认值,如果文件不存在,返回FileNotFoundError |
'w' | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
'x' | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
'a' | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
'b' | 二进制文件模式 |
't' | 文本文件模式,默认值 |
'+' | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
- 文本形式、只读模式、默认值:
f = open("f.txt")
- 文本形式、只读模式、同默认值:
f = open("f.txt", "rt")
- 文本形式、覆盖写模式:
f = open("f.txt", "w")
- 文本形式、追加写模式+ 读文件:
f = open("f.txt", "a+")
- 文本形式、创建写模式:
f = open("f.txt", "x")
- 二进制形式、只读模式:
f = open("f.txt", "b")
- 二进制形式、覆盖写模式:
f = open("f.txt"):f = open("f.txt", "wb")
3.5 文件的关闭
<变量名>.close()
# 变量名为文件句柄
3.6 文件使用
# 文本形式打开文件
tf = open("f.txt", "rt")
print(tf.readline())
tf.close()
# 二进制形式打开文件
bf = open("f.txt", "rb")
print(bf.readline())
bf.close()
四、文件内容的读取
操作方法 | 描述 |
---|---|
<f>.read(size=-1) | 读入全部内容,如果给出参数,读入前size长度,s = f.read(2) # 中国 |
<f>.readline(size=-1) | 读入一行内容,如果给出参数,读入该行前size长度,s = f.readline() # 中国是一个伟大的国家! |
<f>.readlines(hint=-1) | 读入文件所有行,以每行为元素形成列表如果给出参数,读入前hint行,s = f.readlines() # ['中国是一个伟大的国家!'] |
4.1 文件的全文本操作
4.1.1 遍历全文本:方法一
一次读入,统一处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read()
# 对全文txt进行处理
fo.close()
4.1.2 遍历全文本:方法二
按数量读入,逐步处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
txt = fo.read(2)
while txt != "":
# 对txt进行处理
txt = fo.read(2)
fo.close()
4.2 文件的逐行操作
4.2.1 逐行遍历文件:方法一
一次读入,分行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo.readlines():
print(line)
fo.close()
4.2.2 逐行遍历文件:方法二
分行读入,逐行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo:
print(line)
fo.close()
五、数据的文件写入
操作方法 | 描述 |
---|---|
<f>.write(s) | 向文件写入一个字符串或字节流,f.write("中国是一个伟大的国家!") |
<f>.writelines(lines) | 将一个元素全为字符串的列表写入文件,ls = ["中国", "法国", "美国"];f.writelines(ls) # 中国法国美国 |
<f>.seek(offset) | 改变当前文件操作指针的位置,offset含义如下: 0 – 文件开头; 1 – 当前位置; 2 – 文件结尾,f.seek(0) # 回到文件开头 |
写入一个字符串列表
fo = open("output.txt","w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
for line in fo:
print(line) # (没有任何输出)
fo.close()
写入一个字符串列表
fo = open("output.txt","w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
fo.seek(0)
for line in fo:
print(line) # 中国法国美国
fo.close()
六、单元小结
- 文件的使用方式:打开-操作-关闭
- 文本文件&二进制文件,open( , )和.close()
- 文件内容的读取:.read() .readline() .readlines()
- 数据的文件写入:.write() .writelines() .seek()