关于 glob 和 os 库的区别

来源:2-12 批量修改文件名

夜魇丶

2024-01-01 01:42:48

问题描述:

我查了下百度,大概四个库。os、shutil、glob、pathlib。

按照我的理解,这四个库都跟操作文件有关,彼此互补。

但它们之间,很多方法都重叠了。

比如glob和os库。下面给出的代码,使用的是glob,但os本身也有一模一样的方法。

相关代码:

glob.os.path.join(glob.os.getcwd() + '/')


那么在这种情况下:

1. 我该如何判断,哪些场景下应该使用glob,哪些场景中应该使用os。

2. 如果这两个库之间没有明确的界限,可以任意混用。那以下代码是不是意味着,os是glob的属性,它可以算是glob库的子集。

相关代码:

glob.os.path.join == os.path.join  # 功能一致


不知道我有没有表达清楚……

写回答

1回答

好帮手慕小猿

2024-01-02

同学,你好!一、在选择使用glob还是os时,可以考虑以下几点:

1、如果需要进行通配符匹配(例如查找某个文件夹下所有的.txt文件),则应该使用glob库。glob库提供了支持通配符模式的文件路径匹配方法。

2、如果需要对路径进行操作,比如拼接路径、获取文件名、检查路径是否存在等,可以使用os库。os库提供了丰富的路径操作方法,以及与文件操作相关的一些常用函数。

一般而言,如果只关心文件路径的匹配和筛选,使用glob较为方便。如果涉及到更复杂的文件处理操作,包括路径操作、文件属性获取、文件操作等,使用os库更合适。


二、虽然os和glob库在功能上有部分重叠,但它们并非彼此的子集。在同学提供的代码中,glob.os.path.join == os.path.join的结果是True,说明这两个方法在功能上是一致的。然而,这并不代表os库就是glob库的子集。os库提供了更多与文件系统操作和进程控制相关的功能,如:

文件系统操作:

os.listdir(path) 返回指定路径下所有文件和目录的列表。

os.rename(src, dst) 将源路径中的文件或目录重命名为目标路径。

进程控制:

os.system(command) 在子shell中执行指定的命令。

os.kill(pid, signal) 向具有给定进程ID的进程发送信号。



而glob库更专注于路径匹配和文件筛选,如:

路径匹配和文件筛选:

glob.glob(pattern) 根据指定的模式匹配文件或目录,并返回匹配项的列表。

glob.iglob(pattern) 返回一个迭代器,产生部分匹配指定模式的结果。

路径操作:

glob.os.path.join(path, *paths) 将一个或多个路径组合在一起,返回合并后的路径。

glob.os.path.basename(path) 返回给定路径中的文件或目录的基本名称。


它们是针对不同的需求提供的工具,可根据具体情况选择使用适当的库。

祝学习愉快~

0

Python全能工程师 2024 版

8阶段5大热门领域,从入门到实战,带你从零基础晋级全能,全面提升就业力

1568 学习 · 855 问题

查看课程