专栏名称: AI科技大本营
为AI领域从业者提供人工智能领域热点报道和海量重磅访谈;面向技术人员,提供AI技术领域前沿研究进展和技术成长路线;面向垂直企业,实现行业应用与技术创新的对接。全方位触及人工智能时代,连接AI技术的创造者和使用者。
目录
51好读  ›  专栏  ›  AI科技大本营

9个必知的 Python 操作文件/文件夹方法

AI科技大本营  · 公众号  ·  · 2021-12-13 18:52

正文

作者 | 欣一

来源 | Python爱好者集中营

近几年随着 Python 的热度不断上涨,人们渐渐使用这门编程语言来进行一些自动化操作,以节省重复劳动带来的效率低下,那么必定会涉及到对 文件系统的操作 ,包括文件的 增、删、改、查 等等,今天小编就来介绍一下如何用 Python 来实现这些功能

输出当前的路径

我们可以通过 Python 当中的 OS 库来获取当前文件所在的位置
import os
os.getcwd()

路径的拼接

我们通过 os.path.join() 方法来实现
os.path.join('output''Book1.xlsx')
output
output\Book1.xlsx

确认某文件夹或者是文件是否存在

我们先来看如何来确认文件夹是否存在,同样也是通过 OS 模块
os.path.exists('directory_name')
同样的道理,要是我们查看一下某个文件是否存在的时候,可以这么做
os.path.exists('path/file_name')

建立文件夹目录

然后我们来看一下如何新建一个文件夹
os.mkdir("文件夹名称")
当然要是文件夹目录已经提前存在的情况下,上述的代码自然会报错,所以我们通常会先检查一下是否已经存在
if not os.path.exists('文件夹名称'):
    os.mkdir('文件夹名称')
当然我们有时候需要在已建的文件夹下创建子文件夹,例如下图
这个时候要是引用 os.mkdir() 方法或许会稍显繁琐,这时我们可以通过 os.mkdirs() 方法来实现
os.makedirs(os.path.join('test_dir''level_1''level_2''level_3'))

罗列出当前目录下所包含的所有文件

代码如下
os.listdir('文件夹名称')
但是有时候我们可能想例如搜寻一下当前目录下的所有文件中以“py”结尾的文件,我们可以通过通配符来实现,代码如下
list(glob(os.path.join('.''*.py')))
上面提到的 glob 模块能够快速查找我们想要的目录和文件,它支持 * ** ? [] 这四个通配符

移动文件

要是我们想在不同的目录文件夹之下移动文件,该怎么操作呢?这里我们介绍 Python 当中的 shutil 模块,假设我们想要将当前目录下的几个csv文件移动到“test_dir”目录文件夹之下,代码如下
import shutil

for file in list(glob(os.path.join('.''*.csv'))):
    shutil.move(file, 'test_dir')

复制文件

当我们想要复制文件的时候,也可以使用 shutil 模块,例如我们想要将几个“test_dir”目录文件夹下的csv文件复制到“output”目录文件夹之下,代码如下
shutil.copy(os.path.join('test_dir''data.csv'), 'output')
除此之外,我们还能够对粘贴过去的文件重命名,代码如下
shutil.copy(os.path.join('test_dir''data.csv'),
            os.path.join('output''data_2.csv'))

删除文件

我们来看一下删除文件该如何实现? os.remove() 方法可以完成删除文件的功能,
os.remove(os.path.join('output''data_2.csv'))
当我们想要删除一整个目录文件夹的时候,可以使用 os.rmdir() 方法,当然只仅限于是空的目录文件夹
os.rmdir(os.path.join('test_dir''level_1''level_2''level_3'))
而对于目录文件夹下存在文件的,并不是空的目录文件夹,我们还是需要用到 shutil 模块,代码如下
shutil.rmtree("test_delete")
或者是
shutil.rmtree(os.path.join("test_delete""test_1_delete"))

创建和解压 压缩包

谈及到操作压缩包相关的内容,就不得不说 zipobj 这个模块了
  • 创建一个压缩包
这里我们要用到的是 zipfile 模块当中的 write() 方法
file_lists = list(glob(os.path.join('.''*.xlsx')))

with zipfile.ZipFile(r"我创建的压缩包.zip""w") as zipobj:
    for file in file_lists:
        zipobj.write(file)
  • 读取压缩包当中的文件信息
通过 zipfile 模块当中的 namelist() 方法来实现
with zipfile.ZipFile("我创建的压缩包.zip""r") as zipobj:
    print(zipobj.namelist())
output
['Book1.xlsx''supermarkt_sales.xlsx']
可以看到输出的就是上次我们打包的几个 excel 文件
  • 将压缩包当中的单个文件,解压出来
通过 zipfile 模块当中的 extract() 方法来实现
dst = "output"

with zipfile.ZipFile("我创建的压缩包.zip""r") as zipobj:
    zipobj.extract("Book1.xlsx",dst)
上述代码的用意就是将压缩包当中的“Book1.xlsx”文件解压至“output”目录文件夹下
  • 将压缩包中的所有文件,都解压出来
通过 zipfile 模块当中的 extractall() 方法来实现,代码如下
dst = "output"

with zipfile.ZipFile("我创建的压缩包.zip""r") as zipobj:
    zipobj.extractall(dst)







请到「今天看啥」查看全文