【八】Python全栈之路--文件操作
文章目录
- 1. 字典的相关函数
- 2. 集合的操作_函数
- 3. 文件基本操作
- 4. 文件扩展模式
1. 字典的相关函数
字典的相关函数
# ### 字典的相关函数
dic = {}
# 增
# 1.普通方法 (推荐)
dic["top"] = "369"
dic["middle"] = "左手"
dic["bottom"] = "杰克爱"
print(dic)# 2.fromkeys 使用一组键和默认值创建字典
tup = ("a","b","c")
# fromkeys(盛放键的容器,默认值)
dic = {}.fromkeys(tup,None)
print(dic)# 注意点 (字典中的三个键默认指向的是同一个列表)
dic= {}.fromkeys(tup,[])
print(dic)
dic["a"].append(1)
print(dic)# 改造
dic = {}
dic["top"] = []
dic["middle"] = []
dic["bottom"] = []
dic["top"].append("the boy")
print(dic)# 删
dic = {'top': '369', 'middle': '左手', 'bottom': '杰克爱'}
#pop() 通过键去删除键值对 (若没有该键可设置默认值,预防报错)
res = dic.pop("middle")
print(res)
print(dic)
# 可以给pop设置第二个参数值,以防止键不存在时报错
res = dic.pop("middle1234","该键不存在")
print(res)#popitem() 删除最后一个键值对
dic = {'top': '369', 'middle': '左手', 'bottom': '杰克爱'}
res = dic.popitem()
print(res)
print(dic)#clear() 清空字典
dic.clear()
print(dic)# 改
#update() 批量更新(有该键就更新,没该键就添加)# 推荐使用
# 没该键就添加
dic_new = {"jungle":"karsa","support":"宝蓝"}
dic = {'top': '369', 'middle': '左手', 'bottom': '杰克爱'}
dic.update(dic_new)
print(dic)# 有该键就更新
dic_new = {"top":"the bug","support":"xboyww","xiaozhang":"王思聪"}
dic.update(dic_new)
print(dic)# (了解)
dic.update(ww="王文",zl="张磊")
print(dic)
# 查
# get() 通过键获取值(若没有该键可设置默认值,预防报错)
dic = {"top":"the bug","support":"xboyww","xiaozhang":"王思聪"}
# res = dic["top123"]
# get 在获取字典键时,如果不存在,不会发生任何报错,返回的是None
res = dic.get("top123")# 可以在获取不到该键时,给与默认值提示.
res = dic.get("top123","抱歉,该键不存在")
print(res)# 其他操作
#keys() 将字典的键组成新的可迭代对象
dic = {"top":"the bug","support":"xboyww","xiaozhang":"王思聪"}
res = dic.keys()
print(res , type(res))#values() 将字典中的值组成新的可迭代对象 ***
res = dic.values()
print(res , type(res))#items() 将字典的键值对凑成一个个元组,组成新的可迭代对象 ***
res = dic.items()
print(res , type(res))# for i in res:# print(i)
for k,v in res:print(k,v)
2. 集合的操作_函数
集合的相关操作 (交差并补)
# ### 1.集合的相关操作 (交差并补)# intersection() 交集
set1 = {"易烊千玺","王一博","刘某PDD","王文"}
set2 = {"倪萍","赵忠祥","金龟子大风车","小龙人","王文"}res = set1.intersection(set2)
print(res)# 简写 &
res = set1 & set2
print(res)# difference() 差集
res = set1.difference(set2)
print(res)# 简写 -
res = set1 - set2
print(res)#union() 并集
res = set1.union(set2)
print(res)# 简写 |
res = set1 | set2
print(res)#symmetric_difference() 对称差集 (补集情况涵盖在其中)
res = set1.symmetric_difference(set2)
print(res)# 简写 ^
res = set1 ^ set2
print(res)#issubset() 判断是否是子集
set1 = {"刘德华","郭富城","张学友","王文"}
set2 = {"王文"}
res = set2.issubset(set1)
print(res)# 简写
res = set2 < set1
print(res)#issuperset 判断是否是父集
set1 = {"刘德华","郭富城","张学友","王文"}
set2 = {"王文"}
res = set1.issuperset(set2)
print(res)# 简写
res = set1 > set2
print(res)#isdisjoint() 检测两集合是否不相交 不相交 True 相交False
set1 = {"刘德华","郭富城","张学友","王文"}
set2 = {"王文"}
res = set1.isdisjoint(set2)
print(res)# ### 2.集合的相关函数
# 增
#add() 向集合中添加数据
# 一次加一个
set1 = {"王文"}
set1.add("王伟")
print(set1)#update() 迭代着增加
# 一次加一堆
set1 = {"王文"}
lst = ["a","b","c"]
lst = "ppp" # 迭代这添加,无序,会自动去重
set1.update(lst)
print(set1)# 删
setvar = {'刘某PDD', '小龙人','倪萍', '赵忠祥'}
#clear() 清空集合
# setvar.clear()
# print(setvar)#pop() 随机删除集合中的一个数据
# res = setvar.pop()
# print(res)
# print(setvar)#discard() 删除集合中指定的值(不存在的不删除 推荐使用) ***
setvar.discard("刘某PDD111111") # success
# setvar.discard("刘某PDD")
# print(setvar)#remove() 删除集合中指定的值(不存在则报错) (了解)
# setvar.remove("刘某PDD111") # error
# setvar.remove("刘某PDD")
# print(setvar)# ### 3.冰冻集合 (额外了解)
"""frozenset 单纯的只能做交差并补操作,不能做添加或者删除的操作"""
lst = ["王文","宋健","何旭彤"]
fz1 = frozenset(lst)
print(fz1, type(fz1))# 不能再冰冻集合中添加或者删除元素
# fz1.add(1)
# fz1.update("abc")
# fz1.discard("王文")# 冰冻集合只能做交差并补
lst2 = ["王文","王同培","刘一缝"]
fz2 = frozenset(lst2)
print(fz2, type(fz2))# 交集
res = fz1 & fz2
print(res)# 遍历冰冻集合
for i in fz2:print(i)
3. 文件基本操作
# ### 文件操作
"""
语法:
fp = open(文件,模式,编码集)
fp => 文件的io对象 (文件句柄)
i => input 输入
o => outpur 输出fp.read() 读取文件内容
fp.write() 写入文件的内容
"""
# 1.文件的写入操作
# (1) 打开文件
fp = open("ceshi1.txt",mode="w",encoding="utf-8")# 打开冰箱门
# (2) 写入内容
fp.write("把大象怼进去") # 把大象怼进去
# (3) 关闭文件
fp.close() # 把冰箱门关上# 2.文件的读取操作
# (1) 打开文件
fp = open("ceshi1.txt",mode="r",encoding="utf-8")
# (2) 读取内容
res = fp.read()
# (3) 关闭文件
fp.close()
print(res)# 3.文件存储二进制字节流
"""
二进制字节流:`用于传输数据或者存储数据的一种数据格式
b"abc" b开头的字节流要求数据只能是ascii编码中的字符,不能是中文# 将字符串和字节流(Bytes流)类型进行转换 (参数写成转化的字符编码格式)#encode() 编码 将字符串转化为字节流(Bytes流)#decode() 解码 将Bytes流转化为字符串
"""
data = b"abc"
data = "中文".encode("utf-8")
print(data,type(data))
res = data.decode("utf-8")
print(res,type(res))# utf-8下 一个中文占用3个字节
data = "中文".encode("utf-8")
# 计算字节总大小
print(len(data))# 把中字这个字节流进行反解恢复成原来中的字符 "中"
res = b"\xe4\xb8\xad".decode()
print(res)# 4.文件存储二进制的字节流
"""如果存储的是二进制字节流,指定模式wb,不要指定encoding编码集,否则报错"""
fp = open("ceshi2.txt",mode="wb")
strvar = "红鲤鱼绿鲤鱼与驴".encode("utf-8")
fp.write(strvar)
fp.close()# 5.文件读取二进制的字节流
fp = open("ceshi2.txt",mode="rb")
res = fp.read()
fp.close()
print(res)
print(res.decode())# 6.复制文件
"""所有的图片,音频,视频都需要通过二进制字节流来进行存储传输."""
# 先把原文件的二进制字节流读取出来
# 相对路径找集合.png 相对于当前3.py这个文件
# fp = open("集合.png",mode="rb")
# 绝对路径找集合.png 从最底层一级一级往上找
fp = open(r"D:\python32_python\day01\集合.png",mode="rb")
res = fp.read()
fp.close()
# 计算文件中的字节个数 => 文件大小
print(len(res))# 在把二进制字节流写入到另外一个文件中,相当于复制
fp = open("集合2.png",mode="wb")
fp.write(res)
fp.close()
4. 文件扩展模式
文件操作的扩展模式
# ### 文件操作的扩展模式
"""
# (utf-8编码格式下 默认一个中文三个字节 一个英文或符号 占用一个字节)#read() 功能: 读取字符的个数(里面的参数代表字符个数)注意:从当前光标往右边读#seek() 功能: 调整指针的位置(里面的参数代表字节个数)seek(0) 把光标移动到文件的开头seek(0,2) 把光标移动到文件的末尾#tell() 功能: 当前光标左侧所有的字节数(返回字节数)
"""# 1.r+ 先读后写
"""
fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
# 先读
res = fp.read()
# 在写
fp.write("ab")
# 在读
fp.seek(0) # 通过seek把光标移动到开头
print(fp.read())
fp.close()
"""# 2.r+ 先写后读
"""
fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
# 移动光标到最后,否则r模式下,原字符会被覆盖
fp.seek(0,2)
# 先写
fp.write("cd")
# 把光标移动到文件的开头
fp.seek(0)
# 在读
res = fp.read()
print(res)
fp.close()
"""# 3.w+ 可读可写,清空重写(默认可以创建新的文件)
"""
fp = open("ceshi4.txt",mode="w+",encoding="utf-8")
fp.write("abc")
fp.seek(0)
print(fp.read())
fp.close()
"""# 4.a+ 可读可写,追加写入 (默认可以创建新的文件)
"""
fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
fp.write("def")
# 读内容
fp.seek(0)
print(fp.read())
fp.close()
"""# 5.r+和a+区别
"""
r+模式基于当前光标所在位置进行写入覆盖
a+模式会强制把光标放到文件末尾进行追加写入
"""
"""
# fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
fp.seek(3) # 从头数 3个字节的位置
# fp.write("zxc") # 模式会强制把光标放到文件末尾进行追加写入
print(fp.read())
fp.close()
"""# 6.seek,tell,read之间的使用
fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
fp.seek(4)
# tell 当前光标左边所有内容的字节数
res = fp.tell()
print(res)# 在r+模式下 read(2) 代表读取2个字符 在rb模式下 read(2) 代表读取2个字节
fp.read(2) # 当前光标往右所有的字符内容
print(fp.tell())
fp.close()# 7.注意点 (seek在移动时,又可能移动到某个汉字的字节中间,导致原字节无法解析)
"""
fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
fp.seek(3)
print(fp.read())
fp.close()# print("你".encode())
# b'\xe4\xbd\xa0'
"""# 8.with语法 自动实现文件关闭操作
# 方法一.读取二进制字节流
"""
with open("集合2.png",mode="rb") as fp:res = fp.read()with open("集合3.png",mode="wb") as fp:fp.write(res)
"""
# 方法二.继续简化
with open("集合3.png",mode="rb") as fp1 , open("集合4.png",mode="wb") as fp2 :res = fp1.read()fp2.write(res)
小提示:
字符串、列表、元组用+做一个拼接
集合无序去重的
如果这个数据不想让别人任意修改,就把这些集合给冰冻起来
open一个类,来创建一个对象decode(),括号里面不写,默认是utf-8w模式,如果文件已经存在,也是先清空然后在写入内容
a模式,只能追加数据,不能读取数据 a+可以读取数据,读取数据不受影响,seek可以用(会强制把光标放到文件末尾进行追加写入,用seek移动光标也是没有用的)
seek移动字节的时候还是应该慎用,因为一个中文字符占3个字节,一个应为字符占用一个字节,如果一个中文没有截取完整则会报错
seek(0) seek(0,2) 还有纯英文的 纯中文的文件使用seek
事实上,在移动我们的内容的位置用的不是seek、而是通过read readline等
文件,后面的的那些函数来实现的
关闭文件这个操作必须要写
【八】Python全栈之路--文件操作相关推荐
- Python全栈工程师(文件操作、编码)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 Python人工智能从入门到精通 最近简直要死了 发烧感冒 喉咙痛..... 如何长期保存计算机中数据: 需要 ...
- 【九】Python全栈之路--文件函数_函数参数
文章目录 1. 文件相关函数 2. 函数_函数的参数 2.1 函数 2.2 函数的参数 3. 收集参数 4. 命名关键字_总结 4. 小练习 1. 文件相关函数 # ### 刷新缓冲区 "& ...
- Python全栈之路系列之数字数据类型
上篇文章中我们简单的体验了Python语言基本概念与语法,那么在继续深入下去的过程中,不妨先学习几个常见的Python内置数据类型?这也是大部分Python教科书的学习目录,由浅至深,慢慢深入. Py ...
- Python全栈之路系列----之-----内置函数和匿名函数lamdba
引子 什么是内置函数? 内置函数就是python 提供给我们直接拿来就可以用的函数 内置函数--内置命名空间 只管调用 不管实现 总共68个 def func(): == #这是自己定义的函数 ...
- Python全栈之路---day01(背景、语法初识)
PART ONE Python背景知识 Python历史 1989年的圣诞节期间,荷兰人吉多·范罗苏姆(Guido van Rossum),即我们熟悉的龟叔,在阿姆斯特丹不堪眼前的无趣生活,决心开发一 ...
- 【二十二】Python全栈之路--多态_小人射击
文章目录 1. 多态 2. __new__魔术方法 3. 单态模式 4. del_str_repr 4.1 __del__ 4.2 __str__ 5. 小人射击 5.1 连贯操作 5.2 小人射击 ...
- 西游之路——python全栈——Django之ORM操作
Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...
- 西游之路——python全栈——上传文件
1 from django.shortcuts import render,HttpResponse 2 3 def upload(request): 4 if request.method == ' ...
- 【七】Python全栈之路--字符串_列表相关操作
文章目录 1. format格式化_填充符号使用 1.1 format格式化 1.2 format的填充符号的使用 2. 字符串相关的方法 3. 列表的相关操作 4. 列表的相关函数 5. 深浅拷贝 ...
最新文章
- JAVA入门到精通-第73讲-学生管理系统5-dao.sqlhelper
- 数据中心内虚拟机迁移带来的网络技术难题
- 初学Python(一)——数据类型
- python经济学函数_有没有python计量经济学的教程?
- 如何处理error message Invalid parametertype used at function XXXX
- 脚本在流程中的性能影响
- Hive的数据模型-分区表
- IDEA运行VUE npm install报错:chromedriver@2.27.2 install: node install.js
- Linux下9个有用的touch命令示例
- jeecg3.8popup弹出窗口触发失去焦点事件,引发验证弹窗,影响体验问题的解决办法
- kerberos验证_SQL Server中的服务主体名称和Kerberos身份验证概述
- Mysql数据库安装和配置
- 【VBA研究】利用DateAdd函数取上月或上年同期的日期
- 用js处理图片加载错误时加载默认图片的方法
- 读书百客:《相思》鉴赏
- 同步软件、网络同步、备份、分享工具
- 单作用叶片泵的结构与工作原理
- Linux 之软连接
- CPU处理器的分类(ARM系列中央处理器)
- 程序员笔记工具 cherrytree
热门文章
- stm32串口重写及sprintf函数
- activemq mysql 配置详解_ActiveMQ配置详解
- 华为电脑管家与VMware虚拟机冲突记录
- 盒模型、内外边距和边框
- 考研复试打分表公布?评分细则已出!
- Eclipse中格式化JS代码
- WebServices客户端代码生成
- http中的反盗链技术的例子实现
- windows虚拟机_[安装实录]如何在 Vmware虚拟机中安装 macOS Mojave -- Windows 版
- 艺龙 去广告 android,艺龙旅行(com.dp.android.elong) - 9.79.0 - 应用 - 酷安