当前位置: 首页 > news >正文

0️⃣基础 认识Python操作文件夹(初学者)

python标准库提供了os库来管理操作系统相关功能,无需下载,安装,os库包含丰富的操作文件的方法,可以通过import.os导入库之后使用dir(os)查询获得

(一)操作文件路径

(1.1)获取当前路径

os库中的getcwd0)函数可用于获取当前代码所在文件夹的绝对路径(不包含代码文件名)

import os
print("当前工作目录:", os.getcwd())

(1.2)创建文件夹

os库中有两种用于创建文件夹的函数,分别为mkdir()函数和makedirs()函数

import os
os.mkdir("demo")              # 单层
os.makedirs("demo/a/b/c")     # 递归多层
.mkdir()函数

在os库中使用mkdir(路径)函数可以实现在路径中创建一个新的文件夹

.makedirs()函数

在os库中makedirs(路径)函数是根据参数来递归创建文件夹,递归表示根据路径创建包含的全部文件夹

因此mkdir()函数和makedirs()函数的区别在于是否可以递归创建文件夹

(1.3)拼接路径

用ospathjoin()方法可以实现将参数拼接为目录路径,从而方便且快速地获取文件地址

import os
full_path = os.path.join("demo", "a", "test.txt")
print("拼接结果:", full_path)

(1.4)跳转路径

如果需要在程序中实现从当前代码所在文件夹路径跳转到其他路径,可以使用os库中的chdir(路径)函数、但要注意路径必须是已经存在的,否则运行代码后会出现报错

import os
os.chdir("demo")              # 进入 demo 目录
print("跳转后目录:", os.getcwd())

(1.5)判断相对路径和绝对路径

使用os.path.isabs(path)方法可以判断当前路径是相对路径还是绝对路径

import os
print(os.path.isabs("demo"))          # False
print(os.path.isabs("C:\\demo"))      # True(Windows)

(1.6)获取文件路径和文件名

os库的patbh模块下的basename(path)方法可用于获取路径中的文件名,dirhame(路径)方法可用手杂路经中的文件夹路径,split(路径)方法可用于将获取的文件夹路径和文件名以元组的形式返回

import os
p = "demo/a/test.txt"
print("文件名:", os.path.basename(p))
print("目录名:", os.path.dirname(p))
print("拆分元组:", os.path.split(p))

(二)操作文件和文件夹

使用os库中的方法实现查询文件大小、删除文件或文件夹、重命名文件或文件夹等操作

(2.1)查询文件大小

使用os库的path模块下的getsize(path)方法可以获取路径中的文件所占用内存的大小,单位为字节

import os
with open("demo/test.txt", "w") as f:   # 先随便写点内容f.write("hello")
print("文件大小(字节):", os.path.getsize("demo/test.txt"))

(2.2)删除文件和文件夹

os库中的remove(path)方法可用于删除path中的文件

import os
os.remove("demo/test.txt")   # 删除刚创建的文件

(2.3)重命名文件或文件夹

使用os库中的rename()和renames()函数即可实现对文件或文件夹进行重命名。其使用形式如下:

os.rename(src, dst)
os.renames(src,dst)

功能:rename()函数修改指定文件夹或文件的名称,renames()函数递归修改文件夹或文件的名称
参数src:表示要修改的文件夹路径或文件路径
参数dst:表示修改后的文件夹路径或文件路径

import os
os.rename("demo", "demo_new")          # 单层改名
os.renames("demo_new/a", "demo_new/x") # 递归改名

(2.4)复制文件

os库中的os.link()函数可用于创建硬链接以实现复制文件。其使用形式如下:

os.link(src,dst)

参数src:表示要修改的文件夹路径或文件路径
参数dst:表示修改后的文件夹路径或文件路径

import os
with open("demo_new/x/source.txt", "w") as f:f.write("copy me")
os.link("demo_new/x/source.txt", "demo_new/x/target.txt")

(2.5)获取文件夹中的全部文件名

使用os库中的listdir(路径)方法即可获取文件夹中的全部文件名(包含文件和文件夹的名称)

在办公领域中,获取文件夹中的全部文件是较为常见的操作,当需要对一系列的文件进行操作时,可以先将这一系列的文件存放在同一个文件夹中,然后通过os.list()方法遍历并获取文件,再对文件进行操作

import os
print("demo_new 下的所有条目:", os.listdir("demo_new"))

(2.6)判断文件和文件夹

os库中提供了以下3种用于判断path是文件还是文件夹的方法

第1种,bs.path.exists(path)。判断path所指的文件或文件夹是否存在,如果存在则返回True,否则返回False

第2种,os.path.isfle(path)。判断path是否为文件,如果是文件则返回True,否则返回False

第3种,bs.path.isdir(path)。判断path是否为文件夹,如果是文件夹则返回True,否则返回False

import os
print("是否存在:", os.path.exists("demo_new"))
print("是文件? ", os.path.isfile("demo_new/x/source.txt"))
print("是目录? ", os.path.isdir("demo_new"))

(三)执行其他应用程序

通过os库中的system()方法实现调用其他代码文件,使得当前代码程序既可执行其他代码文件,又可获取执行后的结果

(3.1)命令提示符窗口或终端

在Windows系统和macOS系统中分别具有命令提示符(cmd)工具和终端工具,其功能是实现在无图形界面的情况下操作计算机。在计算机最初的发展阶段中,计算机并没有带图形界面的操作系统,只能通过命令提示符窗口或终端来启动程序或创建文件。本小节以命令提示符窗口为例来展开介绍如何使用命令。macOs系统终端中使用的命令与命令提示符窗口中使用的相似,读者可以在网络上查阅相关资料

在命令提示符窗口中含有多种可以控制计算机的大部分功能的命令,例如自动重启计算机、定时关机、启动网络、打开应用程序、磁盘操作等。表9-1所示的内容为命令提示符窗口中的部分命令

命令功能描述
appwiz.cpl启动程序和功能
cale启动计算器
control启动控制面板
shutdown自动关机
mspaint启动画图程序
rstrui系统还原
md创建目录
regedit.exe启动注册表
mstsc远程桌面连接
osk启动屏幕键盘
copy复制文件
netstat查看网络端口
ping测试网络连接
ftp

上传文件

有了以上对命令提示符窗口和终端的讲解,接下来就可以使用os库中的函数实现与以上命令相同的效果

(3.2)system()方法

os库中的system(命令)方法可用于实现命令提示符窗口的命令或终端的命令

import os
os.system("echo Hello from system")   # Windows、macOS、Linux 通用

(3.3)popen()方法

os库中的popen()方法可用于获取执行命令后的结果,获取结果的方法与读取文件的方法类似

import os
with os.popen("dir" if os.name == "nt" else "ls") as p:print(p.read())

(四)压缩和解压文件

Python标准库中的zipfile库可用于处理压缩文件,.zip是一种常用的压缩文件格式。zipfile库中包含用于查看Zip文件、解压Zip文件、将文件压缩为Zip文件等的方法。需要注意的是,在使用zipfile库前需要使用import导入zipfile库

(4.1)判断文件是否为Zip文件

zipfile库中提供了用于判断文件是否为Zip文件的is_zipfile()函数。其使用形式如下:

is_zipfile (flename)

参数filename:表示需要判断的文件的路径
返回值:如果为Zip文件则返回True,否则返回False

import zipfile
print("是 zip 吗?", zipfile.is_zipfile("demo_new.zip"))

将非压缩文件的扩展名修改为.zip会被判断为False

(4.2)打开压缩文件

打开压缩文件可以使用zipfile库中的类ZipFile实现,该类中包含打开、读取、写入、关团和列出Zip文件的方法。类ZipFile的使用形式如下:

ZipFile (fle, mode="r",compression=ZIP STORED, allowZip64=True, compresslevel-None)

参数file:表示需要打开的压缩文件路径和文件名
参数mode:表示打开文件的模式,与open()函数的模式相似,此处打开压缩文件并不是直接解压压缩文件,而是与压缩文件建立联系

import zipfile
with zipfile.ZipFile("demo_new.zip", "w") as z:z.write("demo_new/x/source.txt", arcname="source.txt")z.write("demo_new/x/target.txt", arcname="target.txt")with zipfile.ZipFile("demo_new.zip") as z:print("压缩包内的文件:", z.namelist())

mode分别有'r'、'w'和'a'这3种值
第1种,默认情况下mode为'r',表示对压缩文件有读取权限
第2种,当mode为'W'时,表示对压缩文件有写入权限。当文件不存在时,会创建一个空的压缩文件;当文件存在时,写入的内容会覆盖原来的压缩文件内容
第3种,当mode为'a'时,表示对压缩文件有写入权限。当文件不存在时,会创建一个空的压缩文件;当文件存在时,会在压缩文件内追加内容,而不会覆盖原来的压缩文件内容

参数compression:选择对文件进行压缩的压缩方法,值可以为ZIP_STORED、ZIP_DEFLATED、ZIPBZIP2、ZIP LZMA等
参数allowZip64:当参数值为True时,类ZipFile将在必要时创建带有.zip64扩展名的文件。参数compresslevel:表示压缩级别。当使用ZIP_STORED或ZIP_LZMA压缩方法时,此参数没有作用,当使用ZIP_DEFLATED时,0~9是可以作为参数值的。当使用ZIP_BZIP2时,整数1~9是可以作为参数值的

当需要读取压缩文件中所包含的文件名称时,可以使用namelist()方法

(4.3)解压文件

在zipfile库中解压文件需要使用压缩文件对象中的extract()方法。其使用形式如下:

压缩文件对象.extract(memper,path=lone,pwd=None)

功能:将文件从Zip文件中提取出来(一次提取一个文件)

参数member:表示需要提取的文件名称,其数据类型为字符串类型

参数path:表示是否需要提取到path指定的路径中,其数据类型为字符串类型

参数pwd:若存在密码,则该参数值为密码

import zipfile
with zipfile.ZipFile("demo_new.zip") as z:z.extract("source.txt", path="unzip_result")

(4.4)压缩文件

将文件进行压缩时需要先创建一个压缩文件对象,再依次将需要压缩的文件添加到压缩文件对象中,可使用write()方法来实现。其使用形式如下:

压缩文件对象.write(filename,arcname=None,compress_type=None, compresslevel-None)

参数filename:表示需要添加到压缩文件中的文件名称
参数arcname:表示在压缩文件中的文件名称(默认情况下与filename相同)

参数compress_type:表示压缩类型(ZIP_STORED、ZIP_DEFLATED、ZIP_BZIP2、ZIP_LZMA)

参数compresslevel:表示压缩级别。当使用ZIP_STORED或ZIP_LZMA时,此参数没有作用。当使用ZIP_DEFLATED时,0~9是可以作为参数值的。当使用ZIP_BZIP2时,整数1~9是可以作为参数值的

import zipfile, os
with zipfile.ZipFile("all_demo.zip", "w", zipfile.ZIP_DEFLATED) as z:for root, dirs, files in os.walk("demo_new"):for f in files:full_path = os.path.join(root, f)arc_name   = os.path.relpath(full_path, "demo_new")z.write(full_path, arc_name)

使用write()方法添加完文件后,必须使用cose()方法关闭压缩文件,否则文件无法完成压缩

(4.5)获取Zip文件中文件的属性信息

如需获取Zip文件中文件的属性,可以通过infolist()函数来实现,其功能为返回Zip文件中每个文件的属性列表。属性信息由类ZipInfo提供

import zipfile
with zipfile.ZipFile("all_demo.zip") as z:for info in z.infolist():print(info.filename, info.file_size, "bytes")

(五)*sys库

Python标准库中的sys库用于与Python解释器文件进行交互,例如获取Python的版本信息、传递信息到Python代码中等

(5.1)获取Python信息

  • 获取 Python 的解释器版本信息

sys库中的version用于获取当前Python的解释器版本号,version_info用于获取解释器的版本信息

  • 获取 Python 的其他信息

sys库中还提供了获取Python的其他信息的方法,具体如下:
maxsize属性:获取当前Python支持的对象中包含的最大数据长度
platform属性:获取当前计算机的操作系统
copyright属性:获取当前Python的版权信息
executable属性:获取当前Python解释器在计算机中的目录地址
exec-prefix属性:获取当前Python的安装目录地址

import sys
print("版本:", sys.version)
print("版本元组:", sys.version_info)
print("最大整数值:", sys.maxsize)
print("操作系统:", sys.platform)
print("解释器路径:", sys.executable)

(5.2)退出程序

当代码程序在执行过程中处于某种状态后需要退出时(例如9.5.1小节中的第2个示例代码),可以使用exit()函数。其使用形式如下:

exit(status=None)

参数status:如果值被省略或为None,则默认为0,表示成功退出。如果值为其他整数,则作为系统退出状态。如果是其他信息,则会被当作报错信息输出

import sys
print("准备退出")
sys.exit(0)

(5.3)argv获取输入命令

在讲解pip工具时,介绍了pip的多个参数,例如在命令提示符窗口中执行品5江醒可以获取当前pvthon中已安装的所有第三方库的列表。而pip工具本质上是一个由代码编写而来的程序,那么在使用pip时,list这个参数是如何传递给程序的呢?程序又是如何处理list这个参数的呢?

以上的问题涉及sys库中的argv函数,argv丽数可用于获取用户输入的参数并以列表的形式返回,列表的素引号为0时默认返回当前代码文件所在的目录地址

向argv传递参数的方法与向pip传递参数的方法相同,需要在命令提示符窗口或终端中执行代码文件,即把Python代码文件当作一个程序直接执行,而不是在IDLE中使用菜单栏中的“Run”来执行

在命令提示符窗口中执行代码文件的使用形式如下:

python 代码路径

在执行代码文件时添加参数的使用形式如下:

python 代码路径参数

每个参数之间使用空格隔开

sys.argv可以用于接收执行代码时所传递的参数,之后可以通过代码对参数进行处理

将以下代码保存为 args_demo.py:

import sys
print("收到的参数列表:", sys.argv)

终端执行:

python args_demo.py hello 123

(5.4)stdout,stdin和stderr

sys库中的stdout、stdin和stderr用于显示或获取数据流,其功能分别如下:

  • sys.stdout:将信息显示到控制端,print()函数本质上是由sys.stdou封装而成的
  • sys.stdin:捕获用户输入的信息,input()函数本质上是由stdin封装而成的
  • sys.stderr:输出错误信息,显示效果与代码报错信息相同
import sys
sys.stdout.write("通过 stdout 输出\n")
name = sys.stdin.readline().strip()
sys.stderr.write("你输入的是:" + name + "\n")

http://www.lryc.cn/news/623884.html

相关文章:

  • Linux:TCP协议
  • RK3568平台开发系列讲解:PCIE trainning失败怎么办
  • 深入解析函数指针及其数组、typedef关键字应用技巧
  • 0-12岁幼儿启蒙与教育
  • CF2121C Those Who Are With Us
  • 2001-2024年中国玉米种植分布数据集
  • 【牛客刷题】01字符串按递增长度截取并转换为十进制数值
  • Day07 缓存商品 购物车
  • 14.web api 5
  • LEA(Load Effective Address)指令
  • 19.5 「4步压缩大模型:GPTQ量化实战让OPT-1.3B显存直降75%」
  • 混沌工程(Chaos engineering):系统韧性保障之道
  • 图解希尔排序C语言实现
  • 【Java】多线程Thread类
  • 2025年- H97-Lc205--23.合并k个升序链表(链表、小根堆、优先队列)--Java版
  • 【撸靶笔记】第二关:GET -Error based -Intiger based
  • 【102页PPT】新一代数字化转型信息化总体规划方案(附下载方式)
  • 2.4 双向链表
  • 牛客周赛 Round 104(小红的矩阵不动点/小红的不动点权值)
  • 03高级语言逻辑结构到汇编语言之逻辑结构转换if (...) {...} else if {...} else {...}
  • react 错误边界
  • git stash临时保存工作区
  • Win11 文件资源管理器预览窗格显示 XAML 文件内容教程
  • 【牛客刷题】成绩统计与发短信问题详解
  • 【Git系列】如何从 Git 中删除 .idea 目录
  • 【线程安全(二) Java EE】
  • 寻找数组的中心索引
  • 如果用ApiFox调用Kubernetes API,需要怎么设置证书?
  • Day16 多任务(2)
  • USB-A 3.2 和 USB-A 2.0的区别