真香!Python十大常用文件操作,轻松办公


真香!Python十大常用文件操作,轻松办公

文章插图
日常对于批量处理文件的需求非常多 , 用Python写脚本可以非常方便地实现 , 但在这过程中难免会和文件打交道 , 第一次做会有很多文件的操作无从下手 , 只能找度娘 。
本篇文章整理了10个Python中最常用到的文件操作 , 无论是批处理还是读取文件都会用到 , 相信这个梳理会有所帮助 。
1. 显示当前目录当我们想知道当前的工作目录是什么的时候 , 我们可以简单地使用 os 模块的 getcwd() 功能 , 或者使用 pathlib 的 cwd()  , 如下所示 。
>>> # 第一种方法:显示当前目录... import os... print("当前工作目录:", os.getcwd())... Current Work Directory: /Users/ycui1/PycharmProjects/Medium_Python_Tutorials>>> # 第二种方法:或者我们也可以使用 pathlib... from pathlib import Path... print("当前工作目录:", Path.cwd())... Current Work Directory: /Users/ycui1/PycharmProjects/Medium_Python_Tutorials如果使用的是旧版本的Python(<3.4) , 则必须使用该os模块 。
2. 建立一个新目录要创建目录 , 可以使用 os 模块的 mkdir() 功能 。该函数将在指定的路径下创建目录 , 如果仅使用目录名称 , 则将在当前目录中创建文件夹 , 即绝对路径和相对路径的概念 。
>>> # 在当前文件夹创建新目录... os.mkdir("test_folder")... print("目录是否存在:", os.path.exists("test_folder"))... 目录是否存在: True>>> # 在特定文件夹创建新目录... os.mkdir('/Users/ycui1/PycharmProjects/tmp_folder')... print("目录是否存在:", os.path.exists('/Users/ycui1/PycharmProjects/tmp_folder'))... 目录是否存在: True但是 , 如果想要建立一个多层级的目录 , 比如文件夹中下的文件夹) , 则需要使用该 makedirs() 功能 。
>>> # 创建包含子目录的目录... os.makedirs('tmp_level0/tmp_level1')... print("目录是否存在:", os.path.exists("tmp_level0/tmp_level1"))... Is the directory there: True如果使用最新版本的Python(≥3.4) , 则可以考虑利用 pathlib 模块创建新目录 。它不仅可以创建子目录 , 而且可以处理路径中所有丢失的目录 。
# 使用 pathlibfrom pathlib import PathPath("test_folder").mkdir(parents=True, exist_ok=True)需要注意一个问题 , 如果尝试多次运行上述某些代码 , 可能会遇到问题“无法创建已经存在的新目录” 。我们可以将 exist_ok 参设置为 True 来处理此问题(默认值False值将阻止我们创建目录) 。
>>> # 使用 pathlib... from pathlib import Path... Path("test_folder").mkdir(parents=True, exist_ok=False)... Traceback (most recent call last):File "<input>", line 3, in <module>File "/Users/ycui1/.conda/envs/Medium/lib/python3.8/pathlib.py", line 1284, in mkdirself._accessor.mkdir(self, mode)FileExistsError: [Errno 17] File exists: 'test_folder'3. 删除目录和文件完成对某些文件或文件夹的操作后 , 我们可能希望删除它 。为此 , 我们可以使用 os 模块中的 remove() 函数来删除文件 。如果要删除文件夹 , 我们应该改用 rmdir()。
>>> # 删除一个文件... print(f"* 删除文件前 {os.path.isfile('tmp.txt')}")... os.remove('tmp.txt')... print(f"* 删除文件后 {os.path.exists('tmp.txt')}")... * 删除文件前 True* 删除文件后 False>>> # 删除一个文件夹... print(f"* 删除文件夹前 {os.path.isdir('tmp_folder')}")... os.rmdir('tmp_folder')... print(f"* 删除文件夹后 {os.path.exists('tmp_folder')}")... * 删除文件夹前 True* 删除文件夹后 False如果使用 pathlib 模块,可以使用 unlink() 方法 , 而删除目录可以使用 rmdir() 方法 。请注意 , 这两种方法都是Path对象的实例方法 。
4. 获取文件列表当我们分析某个工作或机器学习项目进行数据处理时 , 需要获取特定目录中的文件列表 。
通常 , 文件名具有匹配的模式 。假设我们要查找目录中的所有.txt文件 , 可使用Path对象的方法 glob() 来实现 。glob() 方法创建了一个生成器 , 允许我们进行迭代 。
>>> txt_files = list(Path('.').glob("*.txt"))... print("Txt files:", txt_files)... Txt files: [PosixPath('hello_world.txt'), PosixPath('hello.txt')]


推荐阅读