os模块

os模块

os模块是和操作系统直接进行交互的,sys模块是直接和python解释器进行交互的。

一、和工作目录有关的

  • os.getcwd():获取当前文件的工作目录,不是文件的存放路径,而是文件在哪个路径执行打印的就是哪个路径。如果希望获取当前文件所在的路径,那么就使用__file__。
  • os.chdir('工作路径'):强制修改工作路径,修改后无论在哪里执行,getcwd()获取的工作路径都将是设定好的工作路径。
  • os.curdir: 获取当前目录名字,返回值永远是点号
  • os.pardir: 获取上一级目录名字,返回值永远是双点号

二、创建、删除文件/文件夹

  • 文件夹操作
    • 创建文件夹
      • 创建单个文件夹(单级目录):os.mkdir('目录名')
      • 创建多级文件夹(多级目录): os.makedirs('dir1/dir2/dir3/dir4')
    • 删除文件夹
      • 删除单个文件夹:os.rmdir('创建多级目录时的所有目录')
        • 每次删除最后一个目录
        • 不能删除非空文件夹
      • 删除多个文件夹:os.removedirs('多级目录')
        • 递归:删除当前空文件后,如果发现上一级目录为空则继续删除
        • 如果发现上级目录不为空,则停止删除。
    • 查看路径下的所有文件夹:os.listdir('/Volumes/workspace'),返回值是列表。
  • 文件操作
    • 删除一个文件:os.remove('文件名字.后缀')
    • 文件夹/文件重命名:os.rename('oldname', 'newname')
    • 查看文件的信息:os.stat('path/文件名.后缀'),查看文件的所有信息。
      • 返回值实例:os.stat_result(st_mode=33188, st_ino=158673, st_dev=16777217, st_nlink=1, st_uid=501, st_gid=80, st_size=560, st_atime=1581670933, st_mtime=1581670932, st_ctime=1581670932)
      • 返回内容结构:
        • st_mode:inode 保护模式
        • st_ino: inode 节点号
        • st_dev: inode 驻留的设备
        • st_nlink: inode 的链接数
        • st_uid: 所有者的用户ID
        • st_gid: 所有者的组ID
        • st_size: 普通文件以字节为单位的大小,包含某些等待特殊文件的数据
        • st_atime: 上次访问的时间
        • st_mtime: 上次修改的时间
        • st_ctime: 由操作系统报告的'ctime'。在某些操作系统上(如unix)是最新的元数据更改的时间,在其他操作系统入windows上是创建的时间。

三、和操作系统差异,更好的实现跨平台

  • 操作系统目录分割符:os.sep,查看当前文件所在操作系统的目录分割符。
  • 当前平台文件的行终止符号:os.linesep,windows平台是'\r\n', mac、linux下是'\n'。
  • 操作系统下文件不同路径之间的分割符:os.pathsep,在windows下分割符为分号,在mac、linux下是冒号。
  • 操作系统名称:os.name,windows操作系统输出为'nt', mac/linux操作系统输出的是'posix'。
'''跨平台拼接路径'''
path_list = ['Volumes','workspace','python-study','re_st']
path = os.sep + os.sep.join(path_list)
# os.sep获取目录分割符
print(path)

四、使用python解释器来和操作系统命令交互

pass

五、查看环境变量

  • 格式:os.environ
  • 返回值是一个字典格式的数据

import os
print(os.getcwd())
os.chdir('/Volumes/workspace/python-study/')
print(os.getcwd())
os.chdir('/Volumes/workspace/python-study/re_st')
print(os.getcwd())
print(os.curdir)
print(os.pardir)
print(__file__)
# os.mkdir('test_dir1')
#创建单个目录
#os.makedirs('dir1/dir2/dir3/dir4')
#os.rmdir('dir1/dir2/dir3')
#os.removedirs('dir1/dir2/dir3/dir4')
print(os.listdir('/Volumes/workspace'))
#os.remove('test1.py')
os.mkdir('dir1')
os.rename('dir1', 'dir')
print(os.stat('/Volumes/workspace/python-study/re_st/os模块.py'))

print(os.sep)
# 当前文件所在操作系统的目录分隔符
print([os.linesep])
print(os.pathsep)

print(os.name)
path_list = ['Volumes','workspace','python-study','re_st']
path = os.sep + os.sep.join(path_list)
print(path)
print(os.environ)

'''
/Volumes/workspace/python-study/re_st
/Volumes/workspace/python-study
/Volumes/workspace/python-study/re_st
.
..
/Volumes/workspace/python-study/re_st/os模块.py
['.DocumentRevisions-V100', '.DS_Store', '.fseventsd', '.Spotlight-V100', '.TemporaryItems', '.Trashes', 'blog', 'Django-study', 'python-study', 'tools-study', 'web-front']
os.stat_result(st_mode=33188, st_ino=158673, st_dev=16777217, st_nlink=1, st_uid=501, st_gid=80, st_size=780, st_atime=1581673634, st_mtime=1581673634, st_ctime=1581673634)
/
['\n']
:
posix
/Volumes/workspace/python-study/re_st
environ({'SHELL': '/bin/zsh', 'TMPDIR': '/var/folders/f7/h_cbfssx65b4dtpr3xj7w7c40000gn/T/', 'GOBIN': '/Users/hopkings/www/Go/bin', 'BOWER': '/usr/local/Cellar/node/13.1.0/libexec/npm/lib/node_modules/bower/bin', 'USER': 'liquanhui', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.2ySYYeLzL0/Listeners', '__CF_USER_TEXT_ENCODING': '0x1F5:0x19:0x34', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Users/hopkings/www/Go/bin:/usr/local/Cellar/node/13.1.0/libexec/npm/lib/node_modules/bower/bin:/sbin:/usr/bin:/usr/sbin', 'PWD': '/Volumes/workspace/python-study/re_st', 'XPC_FLAGS': '0x0', 'XPC_SERVICE_NAME': '0', 'SHLVL': '1', 'HOME': '/Users/liquanhui', 'LOGNAME': 'liquanhui', 'GOPATH': '/Users/hopkings/www/Go', '_': '/usr/local/bin/python3', '__PYVENV_LAUNCHER__': '/usr/local/bin/python3', 'LC_CTYPE': 'UTF-8'})
'''

四、os.path系列

  • os.path.abspath(path或者文件.后缀): 返回规范化的绝对路径
    • 如果传入的是文件,那么返回的是文件的绝对路径
    • 如果传入的是不规范的路径,那么返回的是规范后的路径
  • os.path.split(path+文件名.后缀/path):返回的是元组类型,第一部分是除最后一个部分外的所有路径,第二部分是文件名.后缀或者最后一个目录名。
print(os.path.split('/Volumes/workspace/python-study/re_st/os模块.py'))
print(os.path.split('/Volumes/workspace/python-study/re_st'))

'''
结果是:
('/Volumes/workspace/python-study/re_st', 'os模块.py')
('/Volumes/workspace/python-study', 're_st')
'''

  • os.path.exists(path): 判断path是否存在,如果存在返回为True,不存在返回为False
  • os.path.dirname(path):取除了最后一个以外的所有内容
  • os.path.basename(path): 取path中最后一个内容,和dirname刚好相反
print(os.path.dirname('/Volumes/workspace/python-study/re_st'))
print(os.path.dirname('/Volumes/workspace/python-study/re_st/os模块.py'))
print(os.path.basename('/Volumes/workspace/python-study/re_st/os模块.py'))

'''
结果为
/Volumes/workspace/python-study
/Volumes/workspace/python-study/re_st
os模块.py

'''

  • os.path.isdir(path/file): 如果是绝对路径返回为True,不是返回为False
  • os.path.isfile(path/file): 如果是文件返回为True,反之返回为False。
print(os.path.isfile('os模块.py'))
print(os.path.isfile('/Volumes/workspace/python-study'))
print(os.path.isdir('/Volumes/workspace/python-study'))
print(os.path.isdir('os模块.py'))

'''

'''
结果为:
True
False
True
False
  • os.path.join(path, 新增路径1,新增路径2......): 系统会把新增路径拼接到path后,如果路径不规范可以使用os.path.abspath(total_path)规范路径
  • os.path.getatime(path):路径的最后访问时间
  • os.path.getmtime(path):路径的最后修改时间
  • os.path.getsize(path): 路径/文件的大小(字节)
print(os.path.getsize('/Volumes'))
print(os.path.getsize('/Volumes/workspace'))
print(os.path.getsize('/Volumes/workspace/python-study'))
print(os.path.getsize('/Volumes/workspace/python-study/re_st'))
print(os.path.getsize('/Volumes/workspace/python-study/re_st/os模块.py'))


'''
结果是:
256
578
272
1360
2429

'''

五、扩展用法

os.urandom()用法:
os.urandom(num)用于生成一个随机的不定长的字节,num是生成的位数,根据num来随机生成,这个用法可以很好的用在登陆或者校验上。

import os
result = os.urandom(10)
# 结果是:b'V\n\xd6\x9e+\x04\x84\x8e{\x0e'
posted @ 2020-02-14 18:34  大道至诚  阅读(266)  评论(0编辑  收藏  举报