os模块是与操作系统交互的一个接口
一、基本操作
-
os.getcwd()
获取当前工作目录,即当前python脚本工作的目录路径 -
os.chdir("dirname")
改变当前脚本工作目录;相当于shell下cd
-
os.curdir
返回当前目录:('.')
-
os.pardir
获取当前目录的父目录字符串名:('..')
-
os.makedirs('dirname1/dirname2')
可生成多层递归目录 -
os.removedirs('dirname1')
若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推(子文件夹必须全为空) -
os.mkdir('dirname')
生成单级目录;相当于shell中mkdir dirname -
os.rmdir('dirname')
删除单级空目录,若目录不为空则无法删除,报错;相当于shell中 rmdir dirname -
os.listdir('dirname')
列出指定目录下的所有文件
和子目录
,包括隐藏文件,并以列表方式打印 即获取某一个文件夹下所有的子文件以及子文件夹的名字 -
os.remove()
删除一个文件
而不是文件夹
-
os.rename("oldname","newname")
重命名文件/目录 -
os.stat('path/filename')
获取文件/目录信息 -
os.sep
输出操作系统特定的路径分隔符,win下为 “\
”,Linux下为"/
" -
os.linesep
输出当前平台使用的行终止符,win下为 “\r\n
”, Linux下为"\n
" -
os.pathsep
输出用于分割文件路径的字符串 , win下为;
,Linux下为:
-
os.name
输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
-
os.system("bash command")
运行shell命令,直接显示 系统调用,让操作系统执行命令
二、 三种环境变量:
os.environ
获取系统环境变量 是一个字典(键值必须为字符串), 可以存值,即当程序运行时产生一个变量,如果全局都想使用,则可以os.environ[name]=value
,相当于flask中的g变量。PATH
为文件夹路径,执行系统命令时的查找路径,例如将python解释器加载到PATH中可以在cmd中直接启动Python解释器。sys.path
结果为列表
,导入模块时模块的查找路径
三、os.path系列
os.path.abspath(path)
返回path规范化的绝对路径 之所以规范化是因为windows下以\分割
print(__file__) # F:/BaiduNetdiskDownload/day22/代码/03 os模块.py
print(os.path.abspath(__file__)) # F:\BaiduNetdiskDownload\day22\代码\03 os模块.py
# linux下两者输出没有区别
os.path.split(path)
将path分割成目录和文件名。以元组形式
返回
print(os.path.split(r'a\b\c\d.txt'))
#结果 ('a\\b\\c', 'd.txt')
print(os.path.split(r'a/b/c/d.txt'))
# 结果('a/b/c', 'd.txt')
-
os.path.dirname(path)
返回path的目录。其实就是os.path.split(path)
的第一个元素。
-
os.path.basename(path)
返回path最后的文件名,若path以/
或\
结尾,那么就会返回空值,即os.path.split(path)
的第二个元素为空字符串。否则,就只获取最后一个/
后的元素。
print(os.path.dirname(r'a/b/c/d.txt')) # a/b/c
print(os.path.basename(r'a/b/c/d.txt')) # d.txt
print(os.path.dirname(r'a/b/c/')) # a/b/c
print(os.path.basename(r'a/b/c/')) # 返回空
os.path.exists(path)
如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path)
如果path是绝对路径,返回Trueos.path.isfile(path)
如果path是一个存在的文件,返回True。否则返回Falseos.path.isdir(path)
如果path是一个存在的目录,则返回True。否则返回Falseos.path.join(path1[, path2[, ...]])
将多个路径组合后返回,第一个绝对路径之前的参数将被忽略os.path.getatime(path)
返回path所指向的文件或者目录的最后存取时间os.path.getmtime(path)
返回path所指向的文件或者目录的最后修改时间os.path.getsize(path)
返回path的大小 ,以字节表示
四、os.walk
os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
语法
walk()方法语法格式如下:
os.walk(top[, topdown=True[, onerror=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 的子目录。
返回值
- 返回生成器。
在Unix,Windows中有效。
五、综合应用
案例,某文件目录下有很多.txt文件,每个txt文件都包含一段恶心的文字,如何将其替换成空?
import os
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
print(root) #当前目录路径
print(dirs) #当前路径下所有子目录
print(files) #当前路径下所有非目录子文件
详细如下:
import os
file = []
for root, dirs, files in os.walk('.'):
# print(root) # 当前目录路径
# print(dirs) # 当前路径下所有子目录
# print(files) # 当前路径下所有非目录子文件
for f in files:
if f.endswith('.txt'):
file.append(file)
for i in file:
if i.endswith('.txt'):
with open(i, 'rt', encoding='utf-8') as f:
data = f.read()
with open(i, 'wt', encoding='utf-8') as f:
f.write(data.replace('记住本站网址,Www.luocs.Cn,方便下次阅读,或者百度输入“luocs.cn”,就能进入本站', ''))
六、补充
normcase
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠。
>>> os.path.normcase('c://windows\\system32\\')
'c:\\windows\\system32\\'
规范化路径,如.
和/ .
表示当前, ..
表示上一级目录
# 也是产生路径的一种方式
>>> os.path.normpath('c://windows\\System32\\../Temp/')
'c:\\windows\\Temp'
>>> a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..'
>>> print(os.path.normpath(a))
/Users/jieli/test1
os路径处理
#方式一:不推荐使用
import os
#具体应用
import os,sys
possible_topdir = os.path.normpath(os.path.join(
os.path.abspath(__file__),
os.pardir, #上一级
os.pardir,
os.pardir
))
sys.path.insert(0,possible_topdir)
#方式二:推荐使用
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
pathlib中Path 模块了解
# 获取根目录
最低 Python 版本为 3.5
from pathlib import Path
root=Path(__file__)
res=root.parent.parent
print(res)
拼接
res = Path(r'/a/b/c'))/'d/e.txt' # \a\b\c\d\e.txt
print(Path('/a/b/c').resolve())
#F:\a\b\c
类似于 os.path.normcase()
#方法1:使用os.listdir
import os
for filename in os.listdir(r'c:\windows'):
print("文件夹名字",filename)