os模块



os模块是与操作系统交互的一个接口

一、基本操作

  1. os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

  2. os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd

  3. os.curdir返回当前目录: ('.')

  4. os.pardir 获取当前目录的父目录字符串名:('..')

  5. os.makedirs('dirname1/dirname2') 可生成多层递归目录

  6. os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推(子文件夹必须全为空)

  7. os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname

  8. os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中 rmdir dirname

  9. os.listdir('dirname') 列出指定目录下的所有文件子目录,包括隐藏文件,并以列表方式打印 即获取某一个文件夹下所有的子文件以及子文件夹的名字

  10. os.remove() 删除一个文件而不是文件夹

  11. os.rename("oldname","newname") 重命名文件/目录

  12. os.stat('path/filename') 获取文件/目录信息

  13. os.sep 输出操作系统特定的路径分隔符,win下为 “\”,Linux下为"/"

  14. os.linesep 输出当前平台使用的行终止符,win下为 “\r\n”, Linux下为"\n"

  15. os.pathsep 输出用于分割文件路径的字符串 , win下为; ,Linux下为:

  16. os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

  17. os.system("bash command") 运行shell命令,直接显示 系统调用,让操作系统执行命令

二、 三种环境变量:

  1. os.environ 获取系统环境变量 是一个字典(键值必须为字符串), 可以存值,即当程序运行时产生一个变量,如果全局都想使用,则可以os.environ[name]=value,相当于flask中的g变量。
  2. PATH为文件夹路径,执行系统命令时的查找路径,例如将python解释器加载到PATH中可以在cmd中直接启动Python解释器。
  3. sys.path结果为列表,导入模块时模块的查找路径

三、os.path系列

  1. 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下两者输出没有区别
  1. 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')
    1. os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素。
    1. 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/')) # 返回空

  1. os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
  2. os.path.isabs(path) 如果path是绝对路径,返回True
  3. os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
  4. os.path.isdir(path)如果path是一个存在的目录,则返回True。否则返回False
  5. os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
  6. os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
  7. os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
  8. 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中有效。

详细请参考:
详细用法1
详细用法2

五、综合应用

案例,某文件目录下有很多.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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值