关于 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回答
同学,你好!一、在选择使用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) 返回给定路径中的文件或目录的基本名称。
它们是针对不同的需求提供的工具,可根据具体情况选择使用适当的库。
祝学习愉快~
相似问题
回答 1
回答 1