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-8
w模式,如果文件已经存在,也是先清空然后在写入内容
a模式,只能追加数据,不能读取数据  a+可以读取数据,读取数据不受影响,seek可以用(会强制把光标放到文件末尾进行追加写入,用seek移动光标也是没有用的)
seek移动字节的时候还是应该慎用,因为一个中文字符占3个字节,一个应为字符占用一个字节,如果一个中文没有截取完整则会报错
seek(0)  seek(0,2) 还有纯英文的 纯中文的文件使用seek
事实上,在移动我们的内容的位置用的不是seek、而是通过read readline等
文件,后面的的那些函数来实现的
关闭文件这个操作必须要写

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python持久化存储文件操作方法

    存储文件的重要 一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,. 默认数据是加载到内存中,结果也是保存到内存中, 程序执行结束,所有的数据释放. 要读取二进制文件,比如图片.视频等等,用'rb', 'wb', 'ab'等模式打开文件即可! mode: r:只能读文件 w:只能写入(清空文件内容) a+:读写(追加) 打开文件: f = open('doc/hello.txt',mode='a') 文件的读写操作 f.write('\nh

  • Python使用mmap实现内存映射文件操作

    前言 内存映射通常可以提高I/O的性能,因为使用内存映射时,不需要对每个访问都建立一个单独的系统调用,也不需要在缓冲区之间复制数据,内核和用户都能很方便的直接访问内存. 说明 1)什么叫映射? ==>就是给一个对象(可以是变量.物理等),起一个唯一的别名,建立一一对应的关系: 2)文件映射:将磁盘上的文件的位置,与进程逻辑地址空间中一块大小相同的区域之间的一一对应: 3)映射后得到一个类似数组类型的东西(mmap.mmap()对象),可以通过类似操作数组的方式,达到对文件内容更改的目的: 优点

  • Python高级文件操作之shutil库详解

    前言 什么算是高层的文件操作呢? 普通的文件操作,我们一般只涉及创建文件,文件夹以及写入文件等等.假如我现在需要复制一个文件的内容到另一个文件之中,用pathlib等都只能先打开复制文件,然后进行将其读出来保存,然后再写入新的文件,这种普通的复制操作,无形之中增加了许多步骤. 而shutil库可以直接完成复制符间的操作,同时还支持归档.本篇,将详细介绍文件的高层次操作. 一.copyfile() copyfile()函数用于将一个文件的内容复制到另一个文件之中,准备的来说,它不是copy内容,而

  • python必学知识之文件操作(建议收藏)

    一.文件基本操作 1.1 文件打开和关闭 open('文件名称','打开模式') 模式:r(只读,指针再头) w(只写,存在覆盖,不存创新) a(追加) b(二进制格式) close() 方法关闭文件 f=open('text.txt','w')#创建text.txt文件,用f来指代 f.close()#关闭文件 注意: 打开一个文件之后,一定要关闭,否则后面无法继续操作这个文件 with 上下文管理,不管在处理文件过程中是否发生异常,都能保证 with 语句执行完毕后已经关闭打开的文件句柄.

  • 使用Python批量压缩tif文件操作步骤

    1.前言 我在进行DEM数据的裁剪时,发现各个省的数据量非常大,比如说四川省的30m的DEM数据的大小为2G.考虑到有限的电脑磁盘空间,我对Tif文件采用了LZW压缩. 2.流程 3.批量压缩代码 #文件夹中每个文件都进行压缩 # -*- coding: utf-8 -*- import rasterio as rio import rasterio import os from tqdm import tqdm #每个线程选择一个文件夹 Input_path ="输入文件夹"+&qu

  • Python文件操作之二进制文件详解

    目录 1.二进制读取模式 rb读取模式 将读取到的内容写入到文件 总结 1.二进制读取模式 rt 读取文本文件(默认值) rb 读取二进制文件 file_name = "C:/Users/cheng/Desktop/can.jmx" with open(file_name, 'rt', ) as can: print(can.read()) 执行结果 rb读取模式 file_name = "C:/Users/cheng/Desktop/can.jmx" with o

  • Python全栈之文件操作

    目录 1. 字典的相关函数 2. 集合的操作_函数 3. 文件基本操作 4. 文件扩展模式 小提示: 总结 1. 字典的相关函数 字典的相关函数 # ### 字典的相关函数 dic = {} # 增 # 1.普通方法 (推荐) dic["top"] = "369" dic["middle"] = "左手" dic["bottom"] = "杰克爱" print(dic) # 2.from

  • Python全栈之文件函数和函数参数

    目录 1. 文件相关函数 2. 函数_函数的参数 2.1 函数 2.2 函数的参数 3. 收集参数 4. 命名关键字_总结 小提示: 5. 小练习 练习问题: 练习答案: 总结 1. 文件相关函数 # ### 刷新缓冲区 """ # 刷新缓冲区 flush # 当文件关闭的时候自动刷新缓冲区 # 当整个程序运行结束的时候自动刷新缓冲区 # 当缓冲区写满了 会自动刷新缓冲区 # 手动刷新缓冲区 """ """ fp =

  • Python函数进阶与文件操作详情

    目录 一.作业回顾 1.格式化输出与%百分号 2.字符串切片 3.字典的定义 二.引用变量与可变.非可变类型 1.引用变量 聊聊变量在内存底层的存储形式 如何验证Python中变量的引用关系 把一个变量赋予给另外一个变量的影响 2.Python中可变和非可变数据类型 问题1:在Python中一共有几种数据类型? 问题2:如何判断一个数据类型是可变类型还是非可变类型? 3.可变类型与非可变类型在函数中的应用 可变类型 不可变类型 三.函数递归(重点难点) 1.前言 2.递推算法 3.什么是递归算法

  • python删除过期log文件操作实例解析

    本文研究的主要是python删除过期log文件的相关内容,具体介绍如下. 1. 用Python遍历目录 os.walk方法可以很方便的得到目录下的所有文件,会返回一个三元的tupple(dirpath, dirnames, filenames),其中,dirpath是代表目录的路径,dirnames是一个list,包含了dirpath下的所有子目录的名字,filenames是一个list,包含了非目录的文件,如果需要得到全路径,需要使用os.path.join(dirpath,name).例如t

  • python全栈要学什么 python全栈学习路线

    IT行业,技术要比学历.年龄.从业经验更为重要,技术水平直接决定就业薪资,想要学好python,首先要先了解精通Python语言基础.Python web开发.Python爬虫.Python数据分析这四大方面. 全栈即指的是全栈工程师,指掌握多种技能,并能利用多种技能独立完成产品的人.就是与这项技能有关的都会,都能够独立的完成. 全栈只是个概念,也分很多种类.真正的全栈工程师涵盖了web开发.DBA .爬虫 .测试.运维,要学的内容那是相当的巨量.就web开发方向而言需要学习的内容:前端知识 包

  • python全栈知识点总结

    全栈即指的是全栈工程师,指掌握多种技能,并能利用多种技能独立完成产品的人.就是与这项技能有关的都会,都能够独立的完成. 全栈只是个概念,也分很多种类.真正的全栈工程师涵盖了web开发.DBA .爬虫 .测试.运维,要学的内容那是相当的巨量.就web开发方向而言需要学习的内容:前端知识 包括HTML5 CSS3 JS Jquery Ajax,后端至少需要能够熟练使用Django和tornado,当然会flask更好. 扩展资料: 全栈工程师的厉害之处并不是他掌握很多知识,可以一个人干多份工作.而是

  • python全栈开发语法总结

    太多的小伙伴正在学习Python,就说自己以后要做全栈开发,大家知道这是做什么的吗?我们现在所知道的知识点,哪些是以后你要从事这个全栈所需要的呢?从名字上我们可以获知,"全"一样是掌握全部内容,没错,这里就是要自己掌握全部编程技能,足够独立开发的人,因此全栈士不如也说叫"全战士",如果想做,那就看下面能用到的语法吧. 1.中文编码-UTF8字符集 #!/usr/bin/env python # coding:utf8 2.数值 a = 1 b = 2.1 print

  • Python实现简单的文件操作合集

    目录 一.文件操作 1.打开 2.关闭 3.写入 4.读取 二:python中自动开启关闭资源 一.文件操作 1.打开 r+ 打开存在文件 文件不存在 报错 file = open("user.txt","r+") print(file,type(file)) w+ 若是文件不存在 会创建文件 file = open("user.txt","w+") print(file,type(file)) 2.关闭 file.close

  • Python全栈之字符串和列表相关操作

    目录 1. format格式化_填充符号使用 1.1 format格式化 1.2 format的填充符号的使用 2. 字符串相关的方法 3. 列表的相关操作 4. 列表的相关函数 5. 深浅拷贝 小提示: 6. 小练习 (1)字符串相关练习问题: (2)列表相关练习问题: 总结 1. format格式化_填充符号使用 1.1 format格式化 字符串的格式化format # (1)顺序传参 """{}是format中的占位符""" strvar

随机推荐