使用Python做一些自动化操作时,经常与文件夹和文件打交道,这就依赖于OS模块了。
OS是Operate System的缩写,是Python标准库中一个用于访问操作系统功能的模块,OS模块中的接口可以跨平台、跨系统访问。
OS模块功能很强大,能够做很多事,举个栗子吧:
获取平台信息,判断操作系统
对目录操作
判断操作
有时候我们需要扫码某个文件夹下的文件,然后根据扩展名自动载入对应文件,比如批量读取所有Excel文件,处理Excel里面的数据。下面就介绍两个方法,如何对文件夹/文件进行扫描。
os.listdir()
[scode]os.listdir()[/scode]方法语法格式如下:
os.listdir(path)
该方法用于返回指定的文件夹path包含的文件或文件夹的名字的列表,在Unix系统下[mark]不会包含 . 和 .. [/mark],并且[mark]不会遍历[/mark]列出子文件夹下的文件和文件夹。
如果你想列出当前Python文件所在目录下的所有文件和文件夹,再告诉你一个很有用的方法:[scode]os.getcwd()[/scode]
当然我们还可以对文件夹和文件进行过滤,下面以代码作为演示:
import os
current_dir = os.getcwd()
for f in os.listdir(current_dir):
# 返回当前绝对路径,使用os.path.join()方法可以不用考虑路径分隔符
absolute_path = os.path.join(path, f)
# 如果是文件
if os.path.isfile(absolute_path):
print("这是文件: ", absolute_path)
elif os.path.isdir(absolute_path):
print("这是文件夹:", absolute_path)
使用[scode]os.path.join()[/scode]可以完美解决不同平台路径的分隔符问题,再也不怕搞错路径啦。
我们知道,Windows系统路径分隔符是"\\", Linux类系统如Ubuntu的分隔符是"/"。如果你是一个善于动手的好孩子,可以手动添加分隔符,[scode]os.sep[/scode]可以返回当前平台的路径分隔符。
os.walk()
如果你搜索Python列出当前文件夹下相关文章,大多数看到的都是介绍os.walk()方法,如果我一开始介绍这个方法,你的小手已经点向了小红叉。
walk()方法语法格式如下:
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。
敲重点,[scode]os.walk()[/scode]会进行遍历,不管你的文件目录藏的有多深,也逃不过它的五指山,这是与[scode]os.list()[/scode]不同点之一。
下面以一个例子演示[scode]os.walk()[/scode]方法
import os
current_path = os.getcwd()
for root, dirs, files in os.walk(current_path, topdown=False):
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))