Python文件处理--进阶

Python标准库文件操作相关模块
在这里插入图片描述

1.使用pickle序列化

序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。我们可以使用pickle模块中的函数,实现序列化和反序列操作。
序列化我们使用:
pickle.dump(obj, file): obj就是要被序列化的对象, file 指的是存储的文件
pickle.load(file) :从 file 读取数据,反序列化成对象
将对象序列化到文件中:

import pickle
with  open("data.dat","wb") as f:
   name = "高淇"
   age = 34
   score = [90,80,70]
   resume ={'name':name,'age':age,'score':score}
   pickle.dump(resume,f)

将获得的数据反序列化成对象:

import pickle
with  open("data.dat","rb") as f:
    resume = pickle.load(f)
    print(resume)
#执行结果:{'name': '高淇', 'age': 34, 'score': [90, 80, 70]}

2.CSV文件的操作

csv是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。
与Excel文件不同,CSV文件中:
1.值没有类型,所有值都是字符串
2.不能指定字体颜色等样式
3.不能指定单元格的宽高,不能合并单元格
4.没有多个工作表
5.不能嵌入图像图表
Python标准库的模块csv提供了读取和写入csv格式文件的对象。
我们在excel中建立一个简单的表格:
在这里插入图片描述
csv.reader对象和csv文件读取

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)

执行结果:
在这里插入图片描述
csv.writer对象和csv文件写入

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)        #写入多行(数据)

执行结果:在这里插入图片描述

3.os和os.path模块

os模块 可以帮助我们直接对操作系统进行操作。我们可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等。Linux本身是命令行操作,我们可以通过os.system更容易的调用相关的命令;
⚠️os模块 是做系统运维非常重要的基础。
os模块-调用操作系统命令
1.os.system 调用windows系统的记事本程序:

import os
os.system("notepad.exe")

2.os.system 调用windows系统中ping命令:

import os
os.system("ping www.baidu.com")

3.os.startfile :直接调用可执行文件:
示例:运行安装好的微信

import os
2 os.startfile(r"C:\Program Files
(x86)\Tencent\WeChat\WeChat.exe")

os模块-文件和目录操作

我们可以通过前面讲的文件对象实现对于文件内容的读写操作。如果,还需要对文件和目录做其他操作,可以使用 os 和 os.path 模块。
os 模块下常用操作文件的方法:在这里插入图片描述
os 模块下关于目录操作的相关方法,汇总如下:在这里插入图片描述
示例:

#测试os模块中,关于文件和目录的操作
import os
#打印基本的信息
print(os.name)  #windows-->nt linux-->posix
print(os.sep)   #windows-->\   linux-->/
print(repr(os.linesep))   #windows-->\r\n 
linux-->\n
a = '3'
print(a)
print(repr(a))      #repr可以显示数据信息
#获取文件和文件夹的相关信息
print(os.stat("my01.py"))
#关于工作目录的操作
print(os.getcwd())   #获得当前工作目录
os.chdir("d:")      #当前的工作目录就变成了d:的根目录
######创建目录、删除目录
#os.mkdir("书籍")
#os.rmdir("书籍")
######创建多级目录
# os.makedirs("电影/港台/周星驰")
# os.rename("电影","movie")
dirs = os.listdir("movie")
print(dirs)

os.path模块

os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作在这里插入图片描述
示例:

#测试os.path常用方法
import os
import os.path
#################获得目录、文件基本信息
######################
print(os.path.isabs("d:/a.txt"))    #是否绝对路径
print(os.path.isdir("d:/a.txt"))    #是否目录
print(os.path.isfile("d:/a.txt"))   #是否文件
print(os.path.exists("a.txt"))      #文件是否存在
print(os.path.getsize("a.txt"))     #文件大小
print(os.path.abspath("a.txt"))     #输出绝对路径
print(os.path.dirname("d:/a.txt"))  #输出所在目录
########获得创建时间、访问时间、最后修改时间
##########
print(os.path.getctime("a.txt"))    #返回创建时间
print(os.path.getatime("a.txt"))    #返回最后访问时间
print(os.path.getmtime("a.txt"))    #返回最后修改时间
################对路径进行分割、连接操作
####################
path = os.path.abspath("a.txt")     #返回绝对路径
print(os.path.split(path))          #返回元组:目录、文件('C:\\Users\\Administrator\\PycharmProjects\\mypro_io\\test_os', 'a.txt')
print(os.path.splitext(path))       #返回元组:路径、扩展名('C:\\Users\\Administrator\\PycharmProjects\\mypro_io\\test_os\\a', '.txt')
print(os.path.join("aa","bb","cc")) #返回路径:aa/bb/cc

walk()递归遍历所有文件和目录

os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。格式如下:

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

其中, top :是要遍历的目录。 topdown :可选, True ,先遍历 top 目录再遍历子目录。
返回三元组( root 、 dirs 、 files ):
root :当前正在遍历的文件夹本身
dirs :一个列表,该文件夹中所有的目录的名字
files :一个列表,该文件夹中所有的文件的名字
示例:使用 walk() 递归遍历所有文件和目录

import os
path = os.getcwd()
list_files = os.walk(path,topdown=False)
for root,dirs,files in list_files:
   for name in files:
       print(os.path.join(root,name))
   for name in dirs:
       print(os.path.join(root,name))

若目录结构是:
在这里插入图片描述
运行结果:在这里插入图片描述

4.shutil模块(拷贝和压缩)

shutil 模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。
os 模块提供了对目录或文件的一般操作。 shutil 模块作为补充,提供了移动、复制、压缩、解压等操作,这些 os 模块都没有提供。
实现文件的拷贝

import shutil
#copy文件内容
shutil.copyfile("a.txt","a_copy.txt")

实现递归的拷贝文件夹内容(使用 shutil 模块)

import shutil
#"音乐"文件夹不存在才能用。
shutil.copytree("电影/学习","音乐",ignore=shutil.ignore_patterns("*.html","*.htm"))

将文件夹“电影/学习”下面的内容拷贝到文件夹“音乐”下。拷贝时忽略所有的 html 和 htm 文件。运行结果如下:
在这里插入图片描述
实现将文件夹所有内容压缩(使用 shutil 模块)

import shutil
import zipfile
#将"电影/学习"文件夹下所有内容压缩到"音乐2"文件夹下生成movie.zip
#shutil.make_archive("音乐2/movie","zip","电影/学习")
#压缩:将指定的多个文件压缩到一个zip文件
#z = zipfile.ZipFile("a.zip","w")
#z.write("1.txt")
#z.write("2.txt")
#z.close()

实现将压缩包解压缩到指定文件夹(使用 shutil 模块)

import shutil
import zipfile
#解压缩:
z2 = zipfile.ZipFile("a.zip","r")
z2.extractall("d:/")  #设置解压的地址
z2.close()

4.递归遍历目录下所有文件

import os
import os.path
#递归遍历目录树
def my_print_file(path,level):
   child_files = os.listdir(path)
   for file in child_files:
       file_path = os.path.join(path,file)    
	   print("\t"*level+file_path[file_path.rfind(os.sep)+1:])
       if os.path.isdir(file_path):
           my_print_file(file_path,level+1)
my_print_file("电影",0)

执行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/556495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法部署 | 使用TensorRT部署AlphaPose姿态估计算法

项目应用场景 面向 AlphaPose 姿态估计算法的推理加速场景,项目采用 TensorRT 进行 GPU 算法加速推理。 项目效果 项目细节 > 具体参见项目 README.md (1) 模型转换 python pytorch2onnx.py --cfg ./configs/coco/resnet/256x192_res50_lr1e-3_1x.yaml --chec…

基于Springboot的简历系统

基于SpringbootVue的简历系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 简历模板 招聘会 求职论坛 系统公告 后台登录 后台首页 用户管理 简历模板 模板…

面试八股——JVM★

类加载 类加载器的定义 类加载器的类别 类装载的执行过程 类的装载过程: 加载: 验证: 准备: 这里设置初始值并不是传统意义的设置初始值(那个过程在初始化阶段)。 解析: 初始化: …

YOLOv8改进 | Conv篇 | CVPR2024最新DynamicConv替换下采样(包含C2f创新改进,解决低FLOPs陷阱)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制,这个论文中介绍了一个名为ParameterNet的新型设计原则,它旨在在大规模视觉预训练模型中增加参数数量,同时尽量不增加浮点运算&#x…

servlet的三个重要的类(httpServlet 、httpServletRequst、 httpServletResponse)

一、httpServlet 写一个servlet代码一般都是要继承httpServlet 这个类,然后重写里面的方法 但是它有一个特点,根据之前写的代码,我们发现好像没有写main方法也能正常执行。 原因是:这个代码不是直接运行的,而是放到…

气象观测站点数据下载与处理

一、下载途径 全国400多个气象站气候数据(1942-2022) 王晓磊:中国空气质量/气象历史数据 | 北京市空气质量历史数据 气象数据免费下载网站整理 中国气象站观测的气象数据怎么下载 二、R语言处理 2.1 提取站点文件 library(dplyr) library(…

(助力国赛)数学建模可视化!!!含代码1(折线图、地图(点)、地图(线)、地图(多边形)、地图(密度)、环形图、环形柱状图、局部放大图)

众所周知,数学建模的过程中,将复杂的数据和模型结果通过可视化图形呈现出来,不仅能够帮助我们更深入地理解问题,还能够有效地向评委展示我们的研究成果。   今天,作者将与大家分享8种强大的数学建模可视化图形及其在…

解决VirtualBox虚拟机启动失败的问题

一.出现的问题(未能启动虚拟电脑,由于物理网卡未找到) 一、错误信息分析 “未能启动虚拟电脑,由于物理网卡未找到”:这个错误通常是由于VirtualBox无法识别或连接到物理网卡造成的。可能是由于驱动程序问题、网络设置错…

2024年阿里云最便宜的轻量应用服务器与云服务器价格及优惠购买入口

2024年,阿里云推出了几款价格最便宜的轻量应用服务器和云服务器,其中轻量应用服务器2核2G3M公网带宽50GB 高效云盘活动价格61元1年,经济型e实例4核16G10M公网带宽100G ESSD Entry云盘活动价格最低只要30元/1个月,通用算力型u1实例…

pyskl手势/动作识别的实现与pytorch cuda环境部署保姆教程

恭喜你,找到这篇不需要翻墙就能够成功部署的方法。在国内布置这个挺麻烦的,其他帖子会出现各种问题不能完全贯通。便宜你了。。 实话5年前我用1080训练过一个基于卷积和ltsm的手势识别,实话实说感觉比现在效果好。是因为现在的注意力都在tra…

【Spring】Spring MVC入门

Spring MVC入门 一、什么是Spring Web MVC? 1.1 MVC定义 MVC是Model View Controller的缩写,是一种软件架构的设计模式,将软件系统分为模型、视图、控制器三个部分。 示意图如下: 可以看到,Controller作为一个“粘合剂”处于M…

Hadoop——Yarn基础架构

Hadoop——Yarn基础架构 Hadoop YARN(Yet Another Resource Negotiator)是Apache Hadoop生态系统中的一个子项目,它是用于集群资源管理的框架,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台&…

Mac 利用Homebrew安装JDK

一、安装JDK17 1.安装openjdk17 2.把homebrew安装的openjdk17软链接到系统目录: brew install openjdk17 sudo ln -sfn $(brew --prefix)/opt/openjdk17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk 一、检查是否安装成功 在Termina…

基于SSM的列车订票管理系统(含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的列车订票管理系统3拥有两种角色;管理员、用户 管理员:用户管理、车票管理、购票指南管理、系统管理等 用户:发布帖子、登录注册、购票等 1.…

Spring Boot 整合 Mockito:提升Java单元测试的高效实践

引言 在Java开发领域,Spring Boot因其便捷的配置和强大的功能而受到广泛欢迎,而Mockito作为一款成熟的单元测试模拟框架,则在提高测试质量、确保代码模块间解耦方面扮演着至关重要的角色。本文将详细介绍如何在Spring Boot项目中整合Mockito&…

千锤百炼算法系列之动态规划

题外话 这段时间,我必须把算法弄明白 这篇直接讲解动态规划所有细节! 前面那篇 千锤百炼之每日算法(一)-CSDN博客 也有关于动态规划的讲解,也非常详细 很简单,我成尊不就是了?!!! 正题 动态规划 这里我们主要是让大家明白什么是动态规划,怎么用动态规划解题 我就不用…

手动给docusaurus添加一个搜索

新版博客用docusaurus重构已经有些日子了,根据docusaurus的文档上也申请了Algolia,想一劳永逸的解决博客的搜索问题。但是流水有意,落花无情。 algolia总是不给我回复,我只能对着algolia的申请页面仰天长叹。 正常情况的申请 按照docusaur…

社区论坛小圈子小程序源码系统:自定义小程序管理社区圈子软件圈子系统系统开发-做社区圈子丨圈子论坛社区交友系统开源版小程序源码丨

简述 移动互联网的快速发展,微信小程序作为一种新型的应用形态,已经深入到人们的生活中。特别是对于社区论坛类应用,小程序版本可以更好地满足用户快速、便捷获取信息的需求。下面给大家分享一款社区论坛小圈子小程序源码系统。 在这个信息…

跨境电商MercadoLibre(美客多)平台预约号操作流程自动化系统

目录 一、前置配置准备 1. 安装Chrome插件 2. 添加预约配置 二、开始使用 MercadoLibre(美客多)于2021年10月18号上线了新预约入仓系统,在MercadoLibre美客多平台上,新入仓预约系统是一项非常重要的功能,它可以帮助…

2024华中杯数学建模挑战赛选题建议及各题思路来啦!

大家好呀,华中杯数学建模开始了,来说一下初步的选题建议吧: 首先定下主基调, 本次华中杯推荐选择C题目。难度方面A>B>C,A是优化类题目,难度较高,建议参考23国赛A优秀论…