本节知识大纲:
![2d0823cb63966e10ea6a79384a3efb4a.png](https://img-blog.csdnimg.cn/img_convert/2d0823cb63966e10ea6a79384a3efb4a.png)
本节知识框架
一、文件目录的基本操作
说明:由于Windows和macOS文件目录系统的格式不同,在没有介绍到系统通配分隔符前,代码中的文件目录格式主要匹配macOS系统文件目录结构,下面是Python中常用的文件目录操作方法:
![ca07663b275c41c156cc5eee33f017f1.png](https://img-blog.csdnimg.cn/img_convert/ca07663b275c41c156cc5eee33f017f1.png)
1. 创建文件--mknod()方法和open()方法
(1)mknod方法
import os# 创建文件file_path = "./file_path.txt"os.mknod(file_path)
在window平台不支持这个操作,在Mac平台虽然支持这个语法但是系统出于安全考虑也会拒绝这个操作,需要超级管理员权限。
(2)open方法
在桌面创建一个py_test.txt的文件
open("/Users/yushengtan/Desktop/py_test.txt",mode = "w",encoding = "UTF-8")
创建文件,文件都还没有怎么使用参数w来写入呢?因为在没有文件的情况下,系统会默认自动创建一个空白文件,这样就达到了创建文件的功能。
2. 创建目录--mkdir()方法
比如我们要在当前目录下创建一个py_test的空目录
path = "./py_test"if not os.path.exists(path): # 如果目录不存在 os.mkdir(path)else: print("文件已存在")
案例:
在桌面/Users/yushengtan/Desktop/文件夹创建一个Demo文件夹,在Demo中创建一个文本文件Test01.txt;
import os# 创建目录path = "/Users/yushengtan/Desktop/Demo"path_txt = path + "text01.txt"if not os.path.exists(path): os.mkdir(path) print("目录"+path+"创建成功!")else: print("目录"+path+"文件夹已经存在")# 创建文件if not os.path.exists(path_txt): fd = open(path_txt,mode="w",encoding="UTF-8") print("文件"+path_txt+"创建成功!") fd.close() # 资源释放else: print("文件创建失败")
3. 删除目录和文件--rmdir()方法和remove()方法
案例:
删除test01.txt和Demo
import ospath = "/Users/yushengtan/Desktop/Demo"path_txt = path + "text01.txt"# 删除文件# 如果要删除文件夹必须要保证文件夹是空的if os.path.exists(path_txt): os.remove(path_txt) print("文件"+path_txt+"删除成功!")else: print("要删除的文件"+path_txt+"不存在")# 删除目录if os.path.exists(path): os.rmdir(path_txt) print("文件"+path+"删除成功!")else: print("要删除的文件"+path+"不存在")
4. 文件目录程序完善
(1)跨平台目录分隔符
在windows系统里面支持的路径分隔符是反斜杠,Linux和macOS系统路径分隔符是斜杠/;os.path.sep或者os.sep提供了自动匹配系统的路径分隔符。所以上面的代码中的文件路径在macOS系统下可以执行,在Windows就不能执行了,那么如何让我们的程序可以跨平台执行呢?
解决办法:代码中路径里的斜杠或者反斜杠通过os.path.sep来代替,这样在不同的操作系统下,路径会自动适配。
(2)异常处理 涉及到文件和目录的读写和删除一定要用上异常处理,因为会有很多意外的情况发生,捕获异常来防止程序崩溃
二、创建多个文件
案例:
在当前系统的桌面目录下创建一个文件夹Demo,在文件夹中创建10个文本文件(命名格式:Test+3为随机数字)
难点:
创建的文件名有可能重复
思路01:每次创建文件的的时候判断是否已经存在,如果存在则重新创建
import osimport random# 方法01:每次创建文件的的时候判断是否已经存在,如果存在则重新创建def get_file_name(): return "Test"+"%03d"%(random.randint(0,999))+".txt"path = os.path.sep+"Users"+os.path.sep+"yushengtan"+os.path.sep+"Desktop"+os.path.sep+"Demo"+os.path.sep# 创建目录if not os.path.exists(path): try: os.mkdir(path) print("目录创建成功!") except: print("目录创建异常!")else: print("目录已经存在")# 通过循环创建文件total_number = 10current_number = 0while current_number
思路02:先构建好10个不同的名字,然后依次创建
def get_file_name(num:int): file_name_list = [] current = 0 while current
三、OS模块常见的操作方法
1. os模块常用操作函数
![b6b0f85707584fda27fde3d615b045e9.png](https://img-blog.csdnimg.cn/img_convert/b6b0f85707584fda27fde3d615b045e9.png)
(1)getcwd( )
获取当前的工作路径
print(os.getcwd())
(2)chdir( )
修改当前工作路径
path = os.path.sep+"Users"+os.path.sep+"yushengtan"+os.path.sep+"Desktop"+os.path.sep+"Demo"+os.path.sepos.chdir(path) # 调整当前的工作路径file = "abc.txt"if not os.path.exists(file): fd = open(file,mode="w",encoding="UTF-8") fd.close()
(3)listdir( )
列出一个目录下的所有的文件夹和子文件夹,返回list集合
list01 = os.listdir(os.path.sep+"Users"+os.path.sep+"yushengtan"+os.path.sep+"Desktop"+os.path.sep)for i in list01: file = os.path.sep+"Users"+os.path.sep+"yushengtan"+os.path.sep+"Desktop"+os.path.se