1、⽂件的概念
-
l计算机的⽂件,就是存储在某种⻓期储存设备上的⼀段数据 ;
-
⻓期存储设备包括:硬盘、U 盘、移动硬盘、光盘 ;
-
⽂件的作⽤是可以将数据长期保存下来, 在需要的时候再使用。
二、⽂件的种类
1、⽂本⽂件
-
可以使⽤⽂本编辑软件查看;
-
例如:python 的源程序 ,txt 文本文件、doc、ppt、表格
2、 二进制⽂
-
二进制文章是以01方式进行存储的
-
保存的内容不是给⼈直接阅读的,⽽是提供给其他软件使⽤的
-
例如:图⽚⽂件、⾳频⽂件、视频⽂件等等 ;
-
⼆进制⽂件不能使⽤⽂本编辑软件查看。
三、⽂件操作流程
1. 操作⽂件的套路
⼀共包含三个步骤:
-
第一步:打开⽂件 ;
-
第二步:读、写⽂件 ;
-
读: 将⽂件内容读⼊内存 ;
-
写: 将内容写⼊⽂件 。
-
-
第三步:关闭⽂件 。
2. ⽂件的函数/⽅法
在 Python 中要操作⽂件需要记住 1 个函数和 3 个方法
-
open 函数,打开文件
-
open 函数负责打开⽂件,并且返回⽂件对象
-
如果⽂件存在------返回⽂件操作对象
-
如果⽂件不存在------出错 ;
-
-
-
read / write / close 三个⽅法都需要通过 ⽂件对象 来调⽤
-
read ⽅法 —— 读取⽂件
-
open 函数的第⼀个参数是要打开的⽂件名(⽂件名区分⼤⼩写) ;
-
read ⽅法可以⼀次性读取文件的所有内容 。
-
close ⽅法负责关闭⽂件,如果忘记关闭⽂件,会造成系统资源消耗,⽽且会影响到后续对⽂件的访问 。
-
四、文件操作案例
1、读取文件
# 打 开文件 file = open(r"C:\file\temp\a.txt", "r") # 读取文件 text = file.read() # 显示读取内容print(text) # 关闭文件 file.close()
2、写入文件
# 打 开文件 file = open(r"C:\file\temp\b.txt", "w") # 写入内容 str1 = "hello world\n" file.write(str1) str1 = "hello python\n" file.write(str1) # 关闭文 件 file.close()
3、文件打开方式
open 函数默认以只读⽅式打开⽂件,并且返回⽂件对象
-
“r”:只读方式打开文件;
-
“w”:只写方式打开文件;
-
“a”:追加写方式打开文件;
-
open 函数的访问方式后面添加 b 参数代表访问二进制文件,如:
-
rb: 代表用只读的方式打开一个二进制文件;
-
wb:代表用只写的方式打开一个二进制文件。
-
ab:代表用追加写的方式打开一个二进制文件。
4、指定编码类型
file = open(文件名, 打开方式, encoding="编码")
五、读取内容
1、readline
-
readline 方法可以一次读取一行内容。
-
⽅法执⾏后,会把⽂件指针移动到下⼀⾏,准备再次读取
-
readline 方法读取到文件最后,返回长度为 0 的字符串””
案例:计算文件c.txt中一共有几行
file = open("d:/py1/c.txt","r",encoding="utf-8") n = 0 while True: str = file.readline() if len(str) == 0: break n += 1 print(n)
2、readlines
-
readline 方法可以一次读取全部内容,返回一个列表,内容的每一行是列的一个元素
# 打开文件 file = open(r"C:\file\temp\a.txt") # text 类型为list,list 中每个成员就是文件a.txt 的每一行 text = file.readlines() # 遍历列表text for n in text: # 显示text 每个成员内容 print(n) # 关闭文件file.close()
六、open变种写法
# 原始方法 f = open("a.txt", "r") text = f.read() print(text) f.close() # 新写法 【不需要手动关闭文件,文件会自动关闭】 with open("a.txt", "r") as f: text = f.read() print(text)
七、作业
1.编写程序,创建一个文件名为 a.txt,文件中写入两行,内容如下:
2.编写程序,显示上个练习生成的 a.txt 文件内容。
八、数据序列化
1、概念
-
序列化:将一个任意的数据类型转换成python能识别和处理的字符串
-
逆序列化:将python能识别的字符串转换成对应的数据类型
-
序列化的目的:将数据类型保存到磁盘上,也可以实现将数据发生给另外一个主机
数据类型
-
字符串
-
整数
-
列表
-
元组
-
集合
-
字典
实现序列化的方法
-
pickle
-
json
2、pickle模块
-
序列化方法:pickle.dump()
-
逆序列化方法:pickle.load()
pickle.dump实现序列化
pickle.dump(要保存的对象, 文件名)
案例:将字典实现保存到文件中
# 导入模块 import pickle # 定义一个字典对象 nameList = {"tom":["hebei",18,"男"], "jerry":["tianjin",20,"女"]} # 打开文件,打开方式 wb file = open("d:/py1/c.pkl","wb") # 用dump方法将字典写入到打开的文件中 pickle.dump(nameList, file) # 关闭文件 file.close()
pickle.load实现逆序列化
pickle.load(文件名)
案例:从文件中读取字典类型保存的数据
import pickle file = open("d:/py1/c.pkl","rb") d1 = pickle.load(file) file.close() print(d1)
注意:可以多次执行序列化和逆序列化,但是不建议这么做
3、json模块
json的特点
-
JSON 是纯文本;
-
JSON 便于阅读和编写;
-
JSON 具有清晰的层级结构;
-
有效地提升网络传输效率;
JSON 语法规则
-
大括号保存对象;
-
中括号保存数组;
-
对象数组可以相互嵌套;
-
数据采用键值对表示;
-
多个数据由逗号分隔;
JSON 值
-
数字(整数或浮点数);
-
字符串(在双引号中);
-
逻辑值(true 或 false);
-
数组(在中括号中);
-
对象(在大括号中);
示例
{ "name": "tom", "age": 18, "isMan": true, "school": null, "address": { "country": "中国", "city": "河北", "street": "石家庄" }, "numbers": [2, 6, 8, 9], "links": [ { "name": "zaizhuo", "url": "http://www.zaizhuo.cn" }, { "name": "载卓", "url": "http://www.zaizhuo.com" } ] }
读取json文件
-
json.load(json文件名)
-
json.dump(data, f, ensure_ascii=False)
案例:读取json文件
# 导入模块 import json # 打开文件 f = open('d:/py1/1.json', "r", encoding='UTF-8') # 读取json文件 data = json.load(f) # 返回的data 数据类型为字典或列表 print(data) f.close()
案例:写入json格式数据
import json data = {'name': 'tom', 'age': 20, 'country': '中国'} f = open('temp.json', 'w', encoding='UTF-8') json.dump(data, f, ensure_ascii=False) # ensure_ascii=False 代表中文不转义 f.close()
模块1:radmo模块
-
生成随机数字的
random() 方法
-
作用:生成一个 0-1的随机数
import random num1 = random.random() # 生成一个随机数 print(num1) num2 = random.random() # 生成一个随机数 print(num2) num3 = random.random() # 生成一个随机数 print(num3)
randint(a,b)方法
-
作用:生成指定范围的随机数,其中a是下限,b是上限【 >=a <=b】
import random num1 = random.randint(1,10) # 得到1-10之间的随机数 print(num1) num2 = random.randint(10,20) # 得到10-20之间的随机数 print(num2) num3 = random.randint(10,10) # 得到10-10之间的随机数 print(num3)
uniform(a,b)方法
-
作用:生成指定范围的随机数,其中a是下限,b是上限【 >=a <=b】
-
得到的数字都是浮点数
randrange(start,stop,setp)方法
-
作用:获取指定的数字序列中的任意一个数
import random num1 = random.randrange(3,100,3) print(num1) num1 = random.randrange(3,100,3) print(num1) num1 = random.randrange(3,100,3) print(num1)
choice()方法
-
作用:从给定的对象中随机抽取出来一个
import random str = random.choice("abc q1") # 将字符串中的随机挑一个复制给str print(str) str = random.choice(["123","qq","tom","hebei"]) # 将列表元素随机一个赋值给str print(str)
作业1
1、生成一个随机数
2、生成一个0-100的随机数
3、生成一个任意的浮点数
4、生成一个由6个大写字母组成的随机数
模块2:sys模块
import sys print(sys.argv) # sys.argv 可以获取程序所在的路径 print(sys.version) # sys.version 可以显示python的版本号 print(sys.path) # sys.path 可以显示搜索模块的时候的搜索路径 sys.exit(9) # 终止程序
模块3:time模块
-
sleep(N):让程序赞暂停n秒
import time for i in range(10): print(i) time.sleep(2)
-
time() 可以获取当前的时间戳【当前时间距离计算机元年经过的秒,1970-1-1】
-
注意,在数据库中都是存储时间戳
-
-
localtime() 返回元组,元组中是当前的时间日期信息
-
tm_year=2022,
-
tm_mon=3,
-
tm_mday=23,
-
tm_hour=11,
-
tm_min=21,
-
tm_sec=28,
-
tm_wday=2, 这是周2
-
tm_yday=82, 这是今年的第82天
-
tm_isdst=0
-
-
mktime() 将元组格式的时间,转换为时间戳
模块4:os模块
os.chdir(``"dirname"``) 改变当前脚本工作目录;相当于shell下cd os.makedirs(``'dirname1/dirname2'``) 可生成多层递归目录 os.removedirs(``'dirname1'``) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir(``'dirname'``) 生成单级目录;相当于shell中mkdir dirname os.rmdir(``'dirname'``) 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir(``'dirname'``) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename(``"oldname"``,``"newname"``) 重命名文件``/``目录 os.path.exists(path) 如果path存在,返回``True``;如果path不存在,返回``False os.path.isfile(path) 如果path是一个存在的文件,返回``True``。否则返回``False os.path.isdir(path) 如果path是一个存在的目录,则返回``True``。否则返回``False