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

发布于:2025-08-18 ⋅ 阅读:(15) ⋅ 点赞:(0)

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")


网站公告

今日签到

点亮在社区的每一天
去签到