2021-08-15 Python基础:文件操作-IO、包、模块操作-Day11

文件操作 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()
  • 一般项目都是用的UTF-8编码。
write() / writelines()写入数据
  • write(a):把字符串 a 写入到文件中

  • writelines(b):把字符串列表写入文件中,不添加换行符

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)
文本文件的读取

文件的读取一般使用如下三个方法:

  1. read([size])

从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。

读取到文件末尾,会返回空字符串。

  1. readline()

读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。 3. readlines()

文本文件中,每一行作为一个字符串存入列表中,返回该列表。

pickle 序列化
  • pickle.dump(obj, file) #obj 就是要被序列化的对象,file 指的是存储的文件

  • pickle.load(file) 从 file 读取数据,反序列化成对象

CSV 文件的操作
csv.reader 对象
import csv
with open(r"d:\a.csv") as a:
  a_csv = csv.reader(a) #创建 csv 对象,它是一个包含所有数据的列表,每一行为一个元素
  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)   #创建 csv 对象
  b_csv.writerow(headers) #写入一行(标题)
  b_csv.writerows(rows)   #写入多行(数据)

结果:

工号,姓名,年龄,地址,月薪
1001,高淇,18,西三旗 1 号院,50000
1002,高八,19,西三旗 1 号院,30000
os 模块-文件和目录操作
os 模块下常用操作文件的方法:
  • remove(path):删除指定的文件

  • rename(src,dest):重命名文件或目录

  • stat(path):返回文件的所有属性

  • listdir(path):返回 path 目录下的文件和目录列表

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 语句的区别
  • import 导入的是模块。from…import 导入的是模块中的一个函数/一个类。

  • 如果进行类比的话:

    • import 导入的是“文件”,我们要使用该“文件”下的内容,必须前面加“文件名称”。
    • from…import 导入的是文件下的“内容”,我们直接使用这 些“内容”即可,前面再也不需要加“文件名称”了。
包(package)

当一个项目中有很多个模块时,需要再进行组织。我们将功能类似的模块放到一起, 形成了“包”。本质上,“包”就是一个必须有__init__.py 的文件夹.

导入 module_AA.py的方式如下:
  1. import a.aa.module_AA

    在使用时,必须加完整名称来引用,比如:a.aa.module_AA.fun_AA()

  2. from a.aa import module_AA

    在使用时,直接可以使用模块名。 比如:module_AA.fun_AA()

  3. from a.aa.module_AA import fun_AA 直接导入函数

    在使用时,直接可以使用函数名。 比如:fun_AA()

【注】

  1. from package import item 这种语法中,item 可以是包、模块,也可以是函数、

类、变量。

  1. import item1.item2 这种语法中,item 必须是包或模块,不能是其他。

  2. 导入包的本质其实是“导入了包的__init__.py”文件。也就是说,”import pack1”意味 着执行了包 pack1 下面的__init__.py 文件。 这样,可以在__init__.py中批量导入我们需要 的模块,而不再需要一个个导入。
    
__init__.py 的三个核心作用:
1. 作为包的标识,不能删除。
2. 用来实现模糊导入
3. 导入包实质是执行__init__.py 文件,可以在__init__.py 文件中做这个包的初始化、以及 需要统一执行代码、批量导入。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值