Python基础学习之文件夹常用操作的完整代码
作者:梦想三三
一、获取当前工作目录
import os print(os.getcwd()) # 获取当前代码所在的绝对路径
获取当前 Python 脚本运行的工作目录(也就是代码文件所在的文件夹路径)。
os.getcwd() = get current working directory,返回的是字符串格式的绝对路径。
二、创建单个文件夹
import os os.mkdir(r'数据1') # 在路径中创建一个新的文件夹
在当前工作目录下,创建一个名为数据1的文件夹。
os.mkdir() 只能创建单级文件夹(如果上级目录不存在,会报错)。
前面的r表示 “原始字符串”,可以避免路径中\被当成转义字符处理。
三、递归创建多级文件夹
import os os.makedirs(r'数据104\内容b\内容a\内容c') # 递归来创建文件夹
一次性创建多级嵌套的文件夹(数据104 → 内容b → 内容a → 内容c)。
和mkdir的区别:os.makedirs() 会自动创建所有不存在的上级目录,不会报错。
四、批量创建多个文件夹
import os
for i in range(1,201):
file_name = '文件夹'+str(i)
file_path = os.getcwd()+'\\数据1\\' + file_name
os.mkdir(file_path)在数据1文件夹下,批量创建文件夹1到文件夹200共 200 个文件夹。
逐行拆解:
range(1,201):循环 1 到 200(共 200 次)。file_name = '文件夹'+str(i):拼接出文件夹名,比如文件夹1、文件夹2。file_path = os.getcwd()+'\\数据1\\' + file_name:拼接出完整路径,比如当前路径\数据1\文件夹1。os.mkdir(file_path):创建该文件夹。
注意:如果数据1文件夹不存在,这段代码会报错,需要先手动创建,或者改用os.makedirs()。
五、安全拼接路径
'''将参数拼接为目录路径''' import os dir_new= os.path.join(os.getcwd(), '数据2', '内容c') print(dir_new)
安全拼接多个路径片段,生成一个完整的路径字符串。
自动适配不同操作系统的路径分隔符(Windows 用\,macOS/Linux 用/),代码跨平台不会出错。
避免手动写\\可能出现的错误。
示例输出:比如当前路径是D:\test,则输出D:\test\数据2\内容c。
六、切换工作目录
# 跳转路径
import os
print(os.getcwd()) # 切换前的路径
os.chdir('.\数据2') # 改变当前地址的路径
print(os.getcwd()) # 切换后的路径把 Python 脚本的当前工作目录,切换到数据2文件夹下。
逐行拆解:
print(os.getcwd()):打印切换前的路径。os.chdir('.\数据2'):chdir=change directory,切换到当前目录下的数据2文件夹(.表示当前目录)。print(os.getcwd()):打印切换后的路径,验证是否切换成功。
后续的文件操作(比如读取 / 写入文件),都会以新的工作目录为基准路径。
七、判断路径是相对路径还是绝对路径
import os
a=os.path.isabs('数据2\\文件夹201') # 判断当前路径是相对路径还是绝对路径
b=os.path.isabs('D:\\soft\\pycharm\\code\\pythonProject\\书代码')
print(a,b)判断传入的路径是否是绝对路径,返回True/False。
核心函数:os.path.isabs(path)
a的路径'数据2\\文件夹201'没有盘符,是相对路径 →a=Falseb的路径以D:\开头,是完整的绝对路径 →b=True
绝对路径是从盘符(Windows)或根目录(Linux/macOS)开始的完整路径;相对路径是相对于当前工作目录的路径。
八、从路径中分离文件名和文件夹路径
import os path = r'D:\soft\pycharm\code\pythonProject\书代码\第9章\数据2\文件夹201\a.txt' file_name = os.path.basename(path) # 获取路径中的文件名 dir_name = os.path.dirname(path) # 获取路径中的文件夹路径 file_dir_name = os.path.split(path)# 获取的文件路径和文件名以元组的形式返回 print(file_name, '\n', dir_name, '\n', file_dir_name)
os.path.basename(path):提取路径的最后一部分,也就是文件名(这里会返回a.txt)。
os.path.dirname(path):提取路径中除了文件名之外的部分,也就是文件夹路径(这里会返回D:\soft\pycharm\code\pythonProject\书代码\第9章\数据2\文件夹201)。
os.path.split(path):同时返回文件夹路径和文件名,结果是一个元组:(文件夹路径, 文件名)
运行结果示例:
a.txt
D:\soft\pycharm\code\pythonProject\书代码\第9章\数据2\文件夹201
('D:\\soft\\pycharm\\code\\pythonProject\\书代码\\第9章\\数据2\\文件夹201', 'a.txt')
九、查询文件大小
import os path = r'D:\soft\pycharm\code\pythonProject\书代码\第9章\数据3\书代码.zip' print(os.path.getsize(path)) # 获取路径中的文件所占用内存的大小
获取指定文件的大小,单位是字节(B)。
如果要换算成 KB/MB,可以用:print(os.path.getsize(path)/1024)(KB)、print(os.path.getsize(path)/1024/1024)(MB)。
注意:这个函数不能直接获取文件夹的总大小,需要遍历文件夹内的所有文件累加计算(后面的代码会讲到)。
十、删除文件和文件夹
删除单个文件
import os os.remove(r'D:\soft\pycharm\code\pythonProject\书代码\第9章\数据4\文件夹201\b.txt')
删除指定路径的文件。
只能删文件,不能删文件夹。
如果文件不存在会报错;删除前最好用os.path.exists()判断一下。
删除空文件夹
import os os.rmdir(r'D:\soft\pycharm\code\pythonProject\书代码\第9章\数据4\文件夹1')
删除指定路径的空文件夹。
只能删空文件夹,如果文件夹里有文件 / 子文件夹会报错。
想删除非空文件夹,需要用shutil.rmtree()(需要导入shutil模块)。
十一、文件 / 文件夹重命名
import os
# 批量重命名示例
for i in range(0,1):
old = 'D:\\soft\\pycharm\\code\\pythonProject\\书代码\\第9章\\数据1\\数据2'
new = 'D:\\soft\\pycharm\\code\\pythonProject\\书代码\\第9章\\数据1\\数据'+str(i+200)
os.rename(old, new) # 对文件或文件夹进行重命名
# 递归重命名(可重命名多级路径)
os.renames('D:\\soft\\pycharm\\code\\pythonProject\\书代码\\第9章\\数据1\\数据200', 'D:\\soft\\pycharm\\code\\pythonProject\\书代码\\第9章\\数据1\\数据3\\书局')os.rename(old, new):给文件 / 文件夹重命名,如果new路径不存在,直接改名;如果new路径存在,会报错(Windows 下)。
os.renames(old, new):支持重命名时同时修改上级目录(递归修改路径),如果上级目录不存在会自动创建。
注意:重命名前最好用os.path.exists()判断old路径是否存在,避免报错。
十二、创建硬链接
import os
os.link('D:\\soft\\pycharm\\code\\pythonProject\\书代码\\第9章\\第9章.rar', r'D:\\soft\\pycharm\\code\\pythonProject\\书代码\\第9章\\数据2\\1.rar')为源文件创建一个硬链接,相当于给文件创建一个 “别名”,两个路径指向磁盘上的同一个文件内容,修改其中一个,另一个也会跟着变。
- 硬链接只能在同一个磁盘分区内创建,不能跨分区。
- 更常用的文件复制方法是
shutil.copy()/shutil.copy2()(需要导入shutil模块),比硬链接更直观
十三、获取目录下的所有文件名
import os
print('相对路径中有: ',os.listdir('.')) # 获取路径中的全部文件名核心函数:os.listdir(path)
返回指定路径下的所有文件和文件夹名称的列表。
示例:os.listdir('.')中的.代表当前工作目录,所以会返回当前文件夹里的所有内容。
十四、计算当前目录下所有文件的总大小
import os
file_total_size = 0
for file_name in os.listdir('.'):
file_dir = os.path.join(os.getcwd(), file_name)
file_total_size += os.path.getsize(file_dir)
print(file_total_size)逐行拆解:
file_total_size = 0:初始化总大小为 0。for file_name in os.listdir('.'):遍历当前目录下的所有文件 / 文件夹名。file_dir = os.path.join(os.getcwd(), file_name):拼接出文件的完整路径(避免直接用file_name导致路径错误)。file_total_size += os.path.getsize(file_dir):累加每个文件的大小到file_total_size中。print(file_total_size):输出当前目录下所有文件的总字节数。
注意:这个代码会把文件夹也当成文件计算(但os.path.getsize()对文件夹的返回值通常是目录本身的大小,不是内部文件的总和),所以更严谨的写法是先判断是否为文件。
十五、路径存在性 / 类型判断
import os path = r'D:\soft\pycharm\code\pythonProject\书代码\第9章\数据2\文件夹201\a.txt' print(os.path.exists(path)) # 判断path所指的文件或文件夹是否存在 print(os.path.isfile(path)) # 判断path是否为一个文件 print(os.path.isdir(path)) # 判断path是否为一个文件夹
核心函数:
os.path.exists(path):判断路径是否存在(不管是文件还是文件夹),存在返回True,不存在返回False。os.path.isfile(path):判断路径是否存在且是一个文件,是则返回True。os.path.isdir(path):判断路径是否存在且是一个文件夹,是则返回True。
这些判断函数通常和增删改操作搭配使用,避免路径不存在导致程序报错。
十六、os.system()基础用法
import os
os.system('calc') # 实现cmd的命令或终端的命令
os.system('D:\\soft\\Weixin\\Weixin.exe')逐行说明:
os.system('calc'):执行 CMD 命令calc,打开 Windows 自带的计算器程序。os.system('D:\\soft\\Weixin\\Weixin.exe'):直接运行微信的可执行文件,相当于双击打开微信。
核心函数:os.system(command)
执行操作系统的命令(Windows 的 CMD 命令、macOS/Linux 的终端命令),或者直接打开可执行程序。
执行命令时,会直接把命令的输出打印在控制台。
它的返回值是命令的退出状态码(执行成功返回0,失败返回非 0 值),不是命令的执行结果。
用 os.system() 运行 Python 脚本
import os a = os.system(r"D:\soft\pycharm\code\pythonProject\书代码\第9章\第9章第3个程序.py") print(a)
通过os.system()调用 Python 解释器,运行指定的.py脚本文件。
本质上等价于在 CMD 里执行命令:python D:\soft\pycharm\code\pythonProject\书代码\第9章\第9章第3个程序.py
print(a)会输出命令的退出状态码:脚本正常执行完成,返回0;脚本报错退出,返回非 0 值。
os.system()无法直接获取脚本运行时的打印输出,只能知道脚本执行是否成功。
十七、os.system()处理带空格的路径
import os
# 错误写法(带空格的路径会报错):
# os.system('D:\Program Files (x86)\Tencent\WeChat\WeChat.exe')
# 正确写法1:路径加引号包裹
os.system('"D:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe"')
# 正确写法2:用原始字符串+路径
os.system(r'D:\soft\pycharm\code\pythonProject\书代码\第10章\2002年1月公司营收.xlsx')当路径中包含空格(比如Program Files (x86)),os.system()会把空格当成命令参数分隔符,导致路径解析错误。
解决方法:
- 把带空格的路径用双引号包裹,比如
"D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"。 - 用
r原始字符串表示路径,同时确保路径没有转义字符问题。
补充:os.system()打开.xlsx文件时,会自动调用系统默认的 Excel 程序打开这个文件,相当于双击文件。
十八、os.popen()获取命令执行结果
import os
a = os.popen(r"python D:\soft\pycharm\code\pythonProject\书代码\第9章\第9章第3个程序.py", 'r')
print('jieshu: ', a.read()) # 获取执行命令后的结果核心函数:os.popen(command, mode)
执行系统命令,并返回一个文件对象,可以通过read()/readlines()读取命令的输出结果。
逐行说明:
os.popen(..., 'r'):以只读模式打开命令的输出流。a.read():读取命令执行时打印的所有输出内容(比如脚本里的print()结果)。
os.system()与os.popen()对比:
os.system():结果直接打印到终端,不保存到变量里,变量里只存了执行是否成功的状态码。
os.popen():结果被捕获保存到了变量里,需要你主动调用.read()才会显示出来。
作业
编写一个 Python 程序,使用 os 库完成以下操作:
第一步:在当前目录下创建一个名为 test_folder 的文件夹;
第二步:打印出当前程序的工作目录路径;
第三步:切换工作目录到刚创建的 test_folder 文件夹;
第四步:在 test_folder 文件夹内创建一个名为 test_file.txt 的空文件(提示:可结合 open 函数);
第五步:打印出 test_folder 文件夹内的所有文件 / 文件夹名称;
第六步:删除刚创建的 test_file.txt 文件;
第七步:切换回最初的工作目录,删除 test_folder 文件夹。
要求:代码中要包含必要的异常处理(比如文件夹已存在、文件不存在时的报错处理)
import os
# 记录初始工作目录,用于后续切换回去
original_dir = os.getcwd()
try:
# 第一步:在当前目录下创建一个名为 test_folder 的文件夹
if not os.path.exists('test_folder'):
os.mkdir('test_folder')
print("第一步:test_folder 文件夹创建成功")
else:
print("第一步:test_folder 文件夹已存在,跳过创建")
# 第二步:打印出当前程序的工作目录路径
print("\n第二步:当前工作目录路径:", os.getcwd())
# 第三步:切换工作目录到刚创建的 test_folder 文件夹
os.chdir('test_folder')
print("\n第三步:已切换到 test_folder 目录,当前路径:", os.getcwd())
# 第四步:在 test_folder 文件夹内创建一个名为 test_file.txt 的空文件
# 使用 open 函数创建空文件,模式 'w' 表示写入模式(不存在则创建,存在则清空)
with open('test_file.txt', 'w', encoding='utf-8') as f:
pass
print("\n第四步:test_file.txt 文件创建成功")
# 第五步:打印出 test_folder 文件夹内的所有文件 / 文件夹名称
contents = os.listdir('.') # '.' 表示当前目录(即 test_folder)
print("\n第五步:test_folder 内的内容:", contents)
# 第六步:删除刚创建的 test_file.txt 文件
if os.path.exists('test_file.txt'):
os.remove('test_file.txt')
print("\n第六步:test_file.txt 文件删除成功")
else:
print("\n第六步:test_file.txt 文件不存在,无法删除")
# 第七步:切换回最初的工作目录,删除 test_folder 文件夹
os.chdir(original_dir)
print("\n第七步:已切换回初始工作目录,当前路径:", os.getcwd())
if os.path.exists('test_folder'):
os.rmdir('test_folder') # rmdir 只能删除空文件夹,这里已经删了文件,所以可以用
print("第七步:test_folder 文件夹删除成功")
else:
print("第七步:test_folder 文件夹不存在,无法删除")
except Exception as e:
print(f"\n程序执行出错:{e}")
finally:
# 无论是否出错,都确保切换回初始目录
if os.getcwd() != original_dir:
os.chdir(original_dir)
print("\n已切换回初始工作目录")代码流程说明
- 第一步:先判断
test_folder是否存在,避免重复创建报错。 - 第二步:用
os.getcwd()获取并打印当前路径。 - 第三步:用
os.chdir()切换到test_folder目录。 - 第四步:用
with open(..., 'w')创建空文件(with会自动关闭文件,更安全)。 - 第五步:用
os.listdir('.')列出当前目录(test_folder)下的所有内容。 - 第六步:先判断文件是否存在,再用
os.remove()删除文件。 - 第七步:先切换回初始目录,再用
os.rmdir()删除空的test_folder文件夹。
异常处理说明
- 用
try-except捕获所有可能的异常(比如权限不足、路径错误等),并打印错误信息。 - 用
finally确保无论程序是否出错,最后都会切换回初始工作目录,避免后续操作路径混乱。 - 每一步操作前都加了
os.path.exists()判断,避免因文件 / 文件夹不存在或已存在导致报错。
知识扩展
判断文件是否为 Zip 压缩文件
import zipfile
print(zipfile.is_zipfile('数据3\\书代码.zip'))核心函数:zipfile.is_zipfile(path)
判断指定路径的文件是否是合法的 ZIP 压缩文件,返回True/False。
用途:在操作压缩包前做校验,避免处理损坏或非压缩文件时报错。
读取压缩包内的文件名
import zipfile
z = zipfile.ZipFile('数据3\\书代码.zip', 'r') # 打开一个压缩文件
print(z.namelist()) # 读取压缩文件中所包含的文件名称核心对象:zipfile.ZipFile(),用于操作压缩包的主对象。
参数说明:
第一个参数:压缩包的路径。
第二个参数'r':以只读模式打开压缩包。
z.namelist():返回压缩包内所有文件 / 文件夹的路径列表,比如['num1.py', 'num2.py', 'data.txt']
解压压缩包中的所有文件
import zipfile
z = zipfile.ZipFile('数据3\\书代码.zip')
for f in z.namelist():
z.extract(f, r'数据3') # 解压文件核心函数:z.extract(file_name, path)
将压缩包内的单个文件解压到指定路径。
逐行说明:
z.namelist()遍历压缩包内的所有文件名。z.extract(f, r'数据3'):把文件f解压到当前目录下的数据3文件夹中。
创建新的压缩包并添加文件
import zipfile
z = zipfile.ZipFile('数据3\\书代码新.zip', 'w')
z.write(r'数据3\num1.py')
z.write(r'数据3\num2.py')
z.close()'w'表示以写入模式创建 / 打开压缩包,如果压缩包不存在则新建,存在则会清空原有内容。
z.write(file_path):将指定路径的文件添加到压缩包中。
批量压缩文件夹内的所有文件
import os, zipfile
z = zipfile.ZipFile('数据3\\压缩全.zip', 'w')
for file_name in os.listdir('.\\数据3'):
if file_name != '压缩全.zip': # 避免把自己也压缩进去
z.write('./数据3/'+file_name)
z.close()遍历数据3文件夹下的所有文件,批量添加到压缩全.zip中。
os.listdir('.\\数据3'):获取文件夹内所有文件名。
if file_name != '压缩全.zip':排除正在创建的压缩包本身,避免循环压缩。
读取压缩包内文件的详细属性
import zipfile
z = zipfile.ZipFile('数据3\\书代码.zip', 'r')
print(z.infolist())
for f in z.infolist(): # 取压缩文件Zip中的文件属性
print('文件名:', f.filename, end='\t')
print('修改时间:', f.date_time, end='\t')
print('CRC值:', f.CRC, end='\n\t')
print('压缩后大小:', f.compress_size, end='\t')
print('压缩前大小:', f.file_size)核心函数:z.infolist(),返回压缩包内所有文件的ZipInfo对象列表,每个对象包含文件的详细信息。
可以批量查看压缩包内文件的大小、修改时间,或者计算压缩率。
常用属性说明:
| 属性 | 含义 |
|---|---|
f.filename | 文件在压缩包内的路径 / 名称 |
f.date_time | 文件的修改时间(元组格式:年,月,日,时,分,秒) |
f.CRC | 文件的 CRC 校验值,用于验证文件完整性 |
f.compress_size | 文件压缩后的大小(字节) |
f.file_size | 文件压缩前的原始大小(字节) |
获取 Python 版本信息
import sys print(sys.version) # 获取当前Python的解释器版本号 print(sys.version_info) # 获取解释器的版本信息
sys.version:返回 Python 解释器的版本字符串,比如 3.11.4 (main, ...)。
sys.version_info:返回一个版本元组对象,包含主版本、次版本、微版本等信息,比如 sys.version_info(major=3, minor=11, micro=4, ...)。
可以用来判断用户的 Python 版本,确保代码能在支持的版本上运行。
Python 版本校验
import sys
if (sys.version_info[0]*10 + sys.version_info[1])/10 < 3.8:
print('您的Python版本过低,请安装Python 3.8及以上版本')
sys.exit()
else:
print("您的Python版本正确,代码将继续运行")
print('hello world')sys.version_info[0] 是主版本号(比如 3),sys.version_info[1] 是次版本号(比如 11)。
用 (主版本*10 + 次版本)/10 把版本号转为浮点数,比如3.11,和3.8比较。
sys.exit():直接终止程序运行,后面的代码不会再执行。
效果:如果用户的 Python 版本低于 3.8,程序会直接退出并提示升级;版本符合要求则继续运行。
获取系统与环境信息
import sys print(sys.maxsize) # 获取Python支持的对象中包含的最大数据长度 print(sys.platform) # 获取当前计算机的操作系统 print(sys.copyright) # 获取当前Python的版权信息 print(sys.executable) # 获取当前Python解释器在计算机中的目录地址 print(sys.exec_prefix) # Python安装根目录
sys.maxsize:返回系统中int类型的最大值(和系统位数有关,64 位系统是9223372036854775807)。
sys.platform:返回操作系统标识,Windows 是win32,Linux 是linux,macOS 是darwin。
sys.executable:返回当前运行的 Python 解释器的完整路径,比如C:\Users\xxx\python.exe。
sys.exec_prefix:返回 Python 的安装根目录,用于定位库文件位置。
命令行参数sys.argv基础用法
import sys print(sys.argv)
sys.argv:是一个列表,包含了运行 Python 脚本时传入的所有命令行参数。
列表结构:
sys.argv[0]:脚本本身的路径(固定是第一个元素)。
sys.argv[1:]:后面的元素是用户传入的参数。
示例:运行命令 python 第9章第5个程序.py -c,sys.argv 会是:
['D:\\soft\\pycharm\\code\\pythonProject\\书代码\\第9章\\第9章第5个程序.py', '-c']
命令行参数交互程序
import sys
import os
a = sys.argv
print(a)
for i in range(1, len(sys.argv)):
if sys.argv[i] == '-h':
print('''本代码的帮助
-h:用于查询帮助
-a:用于获取Python的所有关键字
-c:用于获取Python安装的所有第三方库的列表''')
if i > 1 and sys.argv[i-1] == '-h':
num = sys.argv[i]
print(f"你给-h参数传入的值是:{num}")
if sys.argv[i] == '-a':
print('开始查询Python的所有关键字:')
help("keywords")
if sys.argv[i] == '-c':
print('开始查询Python安装的所有第三方库:')
os.system('pip list')这是一个命令行交互工具,通过不同的参数实现不同功能:
-h:显示帮助信息,还可以接收一个额外参数并打印。
-a:调用help("keywords"),列出 Python 的所有内置关键字。
-c:调用os.system('pip list'),列出当前环境安装的所有第三方库(和你截图里的效果一致)。
运行效果:触发-c分支,执行pip list命令,打印出了所有已安装的库。

以上就是Python基础学习之文件夹常用操作的完整代码的详细内容,更多关于Python操作文件夹的资料请关注脚本之家其它相关文章!
