os模块 os -- 操作系统接口模块

OS模块提供了一些方便使用操作系统相关的函数

常用方法:

1、os.name --获取操作系统平台

>>> os.name
'posix'

2、os.getcwd() --获取当前工作目录

>>> os.getcwd()
'/home/test'

3、os.chdir(path) --改变当前工作目录

>>> os.chdir('..')
>>> os.getcwd()
'/home'

4、os.listdir(path) --返回path指定的文件夹包含的文件或文件夹的名字的列表

>>> os.listdir()
['file2.txt', 'file1.txt']

5、os.stat(path) --获取path指定的路径的信息

>>> os.stat('file1.txt')
os.stat_result(st_mode=33188, st_ino=6042576, st_dev=2054, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0, st_atime=1589721256, st_mtime=1589721256, st_ctime=1589721256)

6、os.link(src,dst) --创建硬链接,名为参数 dst,指向参数 src

>>> os.link('file1.txt','file3.txt')

结果:
linux-ko5m:/home/python/test # ll -i
总用量 0
269 -rw-r--r-- 2 root root 0 5月  17 21:19 file1.txt
270 -rw-r--r-- 1 root root 0 5月  17 21:19 file2.txt
269 -rw-r--r-- 2 root root 0 5月  17 21:19 file3.txt

7、os.symlink(src, dst) --创建一个软链接

>>> os.symlink('file1.txt','file4.txt')

执行结果:
linux-ko5m:/home/python/test # ll -i
总用量 4
269 -rw-r--r-- 2 root root 0 5月  17 21:19 file1.txt
270 -rw-r--r-- 1 root root 0 5月  17 21:19 file2.txt
269 -rw-r--r-- 2 root root 0 5月  17 21:19 file3.txt
271 lrwxrwxrwx 1 root root 9 5月  17 21:22 file4.txt -> file1.txt

8、**os.walk() **

语法:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

参数:

top -- 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。

topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。

onerror -- 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。

followlinks -- 设置为 true,则通过软链接访问目录。

详解:

  os.walk(top, topdown=True, onerror=None, followlinks=False)
  可以得到一个三元tupple(dirpath, dirnames, filenames)
  第一个为文件路径,第二个为所有文件夹名,第三个是所有文件夹下的文件,它会输出所有的文件和路径
  dirpath 是一个string,代表目录的路径
  dirnames 是一个list,包含了dirpath下所有子目录的名字
  filenames 是一个list,包含了非目录文件的名字
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
for root, dirs, files in os.walk("1", topdown=False):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))


结果:
linux-ko5m:/home/python/test # ./walk.py 
1/2/file1.txt
1/2/file2.txt
1/2/3
1/a/b/a.txt
1/a/b/b.txt
1/a/b
1/2
1/a

(1)先从根目录进行遍历,读取跟目录的文件夹和文件。

(2)以根目录第一个子目录为新的根目录,读取其文件夹和文件。

(3)再以2中的第一个子文件夹为根目录,读取文件夹和文件。(这个应该是属于树结构里面的自上而下深度遍历算法)

(4)读取1步骤里面其他子目录的文件夹和文件。

9、os.environ --以字典的形式返回环境变量

>>> import os
>>> os.environ
{'NO_AT_BRIDGE': '1', 'LIBGL_DEBUG': 'quiet', 'G_BROKEN_FILENAMES': '1', 'MINICOM': '-c on', 'CSHEDIT': 'emacs', 'HOSTTYPE': 'x86_64', 'LESSOPEN': 'lessopen.sh %s', 'SSH_CLIENT': '172.16.213.1 55986 22', 'MACHTYPE': 'x86_64-suse-linux', 'LOGNAME': 'root', 'USER': 'root', 'INPUTRC': '/etc/inputrc', 'HOME': '/root', 'PATH': '/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/games', 'XKEYSYMDB': '/usr/X11R6/lib/X11/XKeysymDB', 'SSH_CONNECTION': '172.16.213.1 55986 172.16.213.130 22', 'LANG': 'zh_CN.UTF-8', 'TERM': 'xterm-256color', 'SHELL': '/bin/bash', 'SHLVL': '1', 'XDG_SESSION_ID': '1', 'LESS': '-M -I -R', 'CPU': 'x86_64', 'HISTSIZE': '1000', 'LESS_ADVANCED_PREPROCESSOR': 'no', 'MANPATH': '', 'OSTYPE': 'linux', 'PROFILEREAD': 'true', 'XDG_RUNTIME_DIR': '/run/user/0', 'NNTPSERVER': 'news', 'G_FILENAME_ENCODING': '@locale,UTF-8,GB2312,GB18030,GBK,ISO-8859-1', 'HOST': 'linux-ko5m', 'LESSKEY': '/etc/lesskey.bin', 'LESSCLOSE': 'lessclose.sh %s %s', 'LS_OPTIONS': '-A -N --color=tty -T 0', 'GPG_TTY': '/dev/pts/0', 'XNLSPATH': '/usr/X11R6/lib/X11/nls', '_': '/usr/bin/python', 'FROM_HEADER': '', 'XDG_CONFIG_DIRS': '/etc/xdg', 'PYTHONSTARTUP': '/etc/pythonstart', 'SSH_TTY': '/dev/pts/0', 'OLDPWD': '/home/python', 'HOSTNAME': 'linux-ko5m', 'WINDOWMANAGER': '', 'SSH_SENDS_LOCALE': 'yes', 'XDG_DATA_DIRS': '/usr/share', 'PWD': '/home/python/test', 'COLORTERM': '1', 'MAIL': '/var/mail/root', 'LS_COLORS': 'no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.xz=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32:', 'PAGER': 'less', 'MORE': '-sl'}
>>> os.environ['HOME']
'/root'

10、os.getenv() --获取环境变量

>>> os.getenv('HOME')
'/root'

11、os.putenv(key,value) --设置环境变量

>>> os.putenv('HISTSIZE', '500')

12、os.sep --可以取代操作系统特定的路径分隔符

>>> os.sep
'/'

13、os.remove(path) --函数用来删除一个文件

>>> os.listdir()
['1', 'walk.py', 'file.txt']
>>> os.remove('file.txt')
>>> os.listdir()
['1', 'walk.py']
>>> 

14、os.makedirs(path) --创建路径(递归)

os.makedirs('a/b/c/d/e')

15、os.mkdir(path) --创建路径(非递归)

os.mkdir('a')