文件操作 IO技术
创建文件对象open()
open(文件名[,打开方式])
文件名可以是当前目录的文件名或者绝对路径
f = open(r"d:\b.txt",“w”)
打开方式:
- r:读 read 模式
- w:写 write 模式。如果文件不存在则创建;如果文件存在,则重写新内容;
- a:追加 append 模式。如果文件不存在则创建;如果文件存在,则在文件末尾追加内容
- b:二进制 binary 模式(可与其他模式组合使用)
- +:读、写模式(可与其他模式组合使用)
基本的文件写入操作
文本文件写入一般三步骤:
1、创建文件对象
2、写入数据
3、关闭文件对象
f = open(r"a.txt","a")
s = "itbaizhan\nsxt\n"
f.write(s)
f.close()
执行结果:
以下内容被增加到文本文件a.txt中
itbaizhan
sxt
常见的编码介绍
常用编码之间的关系如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Uf06SNn-1629040736423)(/Users/housong/Library/Application Support/typora-user-images/image-20210815123414810.png)]
windows 操作系统默认的编码是 GBK,Linux 操作系统默认的编码是 UTF-8。当我们 用 open()时,调用的是操作系统打开的文件,默认的编码是 GBK,会对中文字符出现乱码。
通过指定文件编码解决中文乱码问题:
f = open(r"b.txt","w",encoding="utf-8")
f.write("尚学堂\n 百战程序员\n")
f.close()
write() / writelines()写入数据
f = open(r"d:\bb.txt","w",encoding="utf-8")
s = ["高淇\n","高老三\n","高老四\n"]
f.writelines(s)
f.close()
close()关闭文件流
-
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用 close()方法 关闭文件对象。 -
当调用 close()方法时,首先会把缓冲区数据写入文件(也可以直接调用 flush() 方法),再关闭文件,释放文件对象。 -
为了确保打开的文件对象正常关闭,一般结合异常机制的 finally 或者 with 关键字实现 无论何种情况都能关闭打开的文件对象。
结合异常机制 finally 确保关闭文件对象:
try:
f = open(r"my01.txt","a")
str = "gaoqiqi"
f.write(str)
except BaseException as e:
print(e)
finally:
f.close()
with 语句(上下文管理器)
with 关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出 with 块,都能 确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。
s = ["高淇\n","高老三\n","高老五\n"]
with open(r"d:\bb.txt","w") as f:
f.writelines(s)
文本文件的读取
文件的读取一般使用如下三个方法:
- read([size])
从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。
读取到文件末尾,会返回空字符串。
- readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。 3. readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表。
pickle 序列化
CSV 文件的操作
csv.reader 对象
import csv
with open(r"d:\a.csv") as a:
a_csv = csv.reader(a)
headers = next(a_csv)
print(headers)
for row in a_csv:
print(row)
执行结果:
['姓名', '年龄', '工作', '薪水']
['高淇', '18', '程序员', '50000']
['高老三', '19', '测试工程师', '20000']
['高老五', '20', '人工智能开发', '50000']
csv.writer 对象
import csv
headers = ["工号","姓名","年龄","地址","月薪"]
rows = [("1001","高淇",18,"西三旗 1 号院","50000"),("1002","高八",19,"西三旗 1 号院","30000")]
with open(r"d:\b.csv","w") as b:
b_csv = csv.writer(b)
b_csv.writerow(headers)
b_csv.writerows(rows)
结果:
工号,姓名,年龄,地址,月薪
1001,高淇,18,西三旗 1 号院,50000
1002,高八,19,西三旗 1 号院,30000
os 模块-文件和目录操作
os 模块下常用操作文件的方法:
os 模块下关于目录操作的相关方法
-
mkdir(path):创建目录 -
makedirs(path1/path2/path3/… ) :创建多级目录 -
rmdir(path):删除目录 -
removedirs(path1/path2…):删除多级目录 -
getcwd():返回当前工作目录:current work dir -
chdir(path):把 path 设为当前工作目录 -
walk():遍历目录树 -
sep:当前操作系统所使用的路径分隔符
os.path 模块
-
isabs(path):判断 path 是否绝对路径 -
isdir(path):判断 path 是否为目录 -
isfile(path):判断 path 是否为文件 -
exists(path):判断指定路径的文件是否存在 -
getsize(filename):返回文件的大小 -
abspath(path):返回绝对路径 -
dirname§:返回目录的路径 -
getatime(filename):返回文件的最后访问时间 -
getmtime(filename):返回文件的最后修改时间 -
walk(top,func,arg):递归方式遍历目录 -
join(path,*paths):连接多个 path -
split(path):对路径进行分割,以列表形式返回 -
splitext(path):从路径中分割文件的扩展名
模块的导入
from…import 导入
使用 from…import 导入模块中的成员:
from 模块名 import 成员 1,成员 2,...
import 语句和 from…import 语句的区别
包(package)
当一个项目中有很多个模块时,需要再进行组织。我们将功能类似的模块放到一起, 形成了“包”。本质上,“包”就是一个必须有__init__.py 的文件夹.
导入 module_AA.py的方式如下:
-
import a.aa.module_AA 在使用时,必须加完整名称来引用,比如:a.aa.module_AA.fun_AA() -
from a.aa import module_AA 在使用时,直接可以使用模块名。 比如:module_AA.fun_AA() -
from a.aa.module_AA import fun_AA 直接导入函数 在使用时,直接可以使用函数名。 比如:fun_AA()
【注】
- from package import item 这种语法中,item 可以是包、模块,也可以是函数、
类、变量。
-
import item1.item2 这种语法中,item 必须是包或模块,不能是其他。 -
导入包的本质其实是“导入了包的__init__.py”文件。也就是说,”import pack1”意味 着执行了包 pack1 下面的__init__.py 文件。 这样,可以在__init__.py中批量导入我们需要 的模块,而不再需要一个个导入。
__init__.py 的三个核心作用:
1. 作为包的标识,不能删除。
2. 用来实现模糊导入
3. 导入包实质是执行__init__.py 文件,可以在__init__.py 文件中做这个包的初始化、以及 需要统一执行代码、批量导入。
|