Python入門之OS模塊


OS模塊簡介:

OS模塊是Python標准庫中的一個用於訪問操作系統功能的模塊,OS模塊提供了一種可移植的方法使用操作系統的功能。使用OS模塊中提供的接口,可以實現跨平台訪問。但是在OS模塊中的接口並不是所有平台都通用,有些接口的實現是依靠特定平台下的接口的。在OS模塊中提供了一系列訪問操作系統功能的接口,便於編寫跨平台的應用。

在使用OS模塊的時候,如果需要獲取系統的名字,可以使用 os.name 獲取拋入這個模塊的系統的名稱,如果是在windows平台下,則返回‘nt’,在Linux則返回‘posix’。

以下是一些常用的os模塊命令

1、os.getcwd():獲取當前工作目錄;若是運行腳本則是當前python腳本工作的目錄路徑;

#直接在python3接口下運行
[root@localhost ~]# python3
Python 3.6.1 (default, Jun 26 2017, 10:18:59) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getcwd()
'/root'
>>> exit() 
[root@localhost ~]# pwd
/root
#腳本運行
[root@localhost ~]# cat python_os.py 
#!/usr/bin/python3
import os
print(os.getcwd())
執行結果:
[root@localhost ~]# ./python_os.py 
/root

2、os.chdir("dir_name") 改變當前腳本工作目錄;相當於shell下cd

>>> import os
>>> os.getcwd()
'/root'
>>> os.chdir("/tmp/")
>>> os.getcwd()
'/tmp'

3、os.curdir 返回當前目錄: ('.')

>>> import os
>>> os.getcwd()
'/root'
>>> os.curdir
'.'

4、os.pardir 獲取當前目錄的父目錄字符串名:('..')

>>> os.pardir      
'..'

5、os.makedirs('dirname1/dirname2') :可生成多層遞歸目錄

>>> import os
>>> os.getcwd()
'/root'
>>> os.makedirs("./pytest1/pytest2")    #創建多層目錄
>>> os.chdir("./pytest1/pytest2")    #進入創建好的目錄當中
>>> os.getcwd()
'/root/pytest1/pytest2'

6、os.removedirs('dirname1') :若目錄為空,則刪除;並遞歸到上一級目錄,如果此級目錄也為空,也刪除,依此類推

#!/usr/bin/python3

import os
os.chdir("/tmp")
print(os.getcwd())
os.makedirs("/tmp/test1/test2/test3")
print(os.system("tree"))    #打印為刪除目錄前的的目錄結構
os.system("cp /etc/issue ./test1")    #os.system("command")可以運行系統命令
os.removedirs("/tmp/test1/test2/test3")    #刪除/tmp/test1/test2/test3;因為test2/test3均為空目錄,所以會被刪除,而test1不是空目錄,所以刪除目錄到test1就會結束
print(os.system("tree"))    #打印刪除目錄后的目錄結構
執行結果:
/tmp
.
├── pytest.py
└── test1
    └── test2
        └── test3

3 directories, 1 file
0
.
├── pytest.py
└── test1
    └── issue

1 directory, 2 files
0

7、os.mkdir('dirname') :生成單級目錄;相當於shell中mkdir dirname

   os.rmdir('dirname') 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname

#!/usr/bin/python3

import os

print(os.getcwd())
os.system("tree")    #查看tmp的目錄結構

os.mkdir("one_dir")    #創建單個目錄one_dir
os.system("tree")    #查看創建單個目錄后的tmp目錄結構

os.rmdir("one_dir")    #刪除單個目錄one_dir
os.system("tree")    #查看刪除單個目錄后的tmp目錄結構
執行結果:
/tmp
.
├── pytest1.py
└── pytest.py

0 directories, 2 files
.
├── one_dir
├── pytest1.py
└── pytest.py

1 directory, 2 files
.
├── pytest1.py
└── pytest.py

8、os.listdir('dirname') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式打印

#!/usr/bin/python3

import os
print(os.listdir("/"))
#查看/下的所有文件和目錄
執行結果:
['boot', 'dev', 'proc', 'run', 'sys', 'etc', 'root', 'var', 'tmp', 'usr', 'bin', 'sbin', 'lib', 'lib64', 'home', 'media', 'mnt', 'opt', 'srv']

9、os.remove() :刪除一個文件

#!/usr/bin/python3

import os

os.chdir("/tmp")
os.system("tree")

os.remove("./test1/issue")    #刪除/tmp/test1/issue文件
os.system("tree")
執行結果:
[root@localhost tmp]# ./pytest4.py 
.
├── pytest1.py
├── pytest2.py
├── pytest4.py
├── pytest.py
└── test1
 ├── issue
    └── test2

2 directories, 5 files
.
├── pytest1.py
├── pytest2.py
├── pytest4.py
├── pytest.py
└── test1
    └── test2

10、os.rename("oldname","newname") :重命名文件/目錄

#!/usr/bin/python3

import os
os.chdir("/tmp")
os.system("cp /etc/issue ./test1")
os.system("tree")

os.rename("./test1/issue","./test1/py_issue")    #修改issue文件名
os.rename("test1","py_test1")    #修改test1的目錄名
os.system("tree")
執行結果:
.
├── pytest1.py
├── pytest2.py
├── pytest4.py
├── pytest5.py
├── pytest.py
└── test1
 ├── issue
    └── test2

2 directories, 6 files
.
├── py_test1
│   ├── py_issue
│   └── test2
├── pytest1.py
├── pytest2.py
├── pytest4.py
├── pytest5.py
└── pytest.py

2 directories, 6 files

11、os.stat('path/filename') 獲取文件/目錄信息

#!/usr/bin/python3

import os

dir_stat = os.stat("/tmp/py_test1")
file_stat = os.stat("/tmp/pytest1.py")

print(dir_stat)
print(file_stat)
執行結果:
os.stat_result(st_mode=16877, st_ino=748164, st_dev=64768, st_nlink=3, st_uid=0, st_gid=0, st_size=35, st_atime=1498491822, st_mtime=1498491822, st_ctime=1498491822)
os.stat_result(st_mode=33261, st_ino=16788520, st_dev=64768, st_nlink=1, st_uid=0, st_gid=0, st_size=146, st_atime=1498490209, st_mtime=1498490201, st_ctime=1498490201)

12、os.sep 輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/"

linux Centos7:
In [65]: os.sep
Out[65]: '/' window 7: >>> os.sep
'\\'
>>> 

13、os.linesep 輸出當前平台使用的行終止符,win下為"\t\n",Linux下為"\n"

linux Centos7:
In [66]: os.linesep
Out[66]: '\n' window 7: >>> os.linesep
'\r\n'

14、os.name 輸出字符串指示當前使用平台。win->'nt'; Linux->'posix'

linux Centos7:
In [68]: os.name
Out[68]: 'posix'
windows 7:
>>> os.name
'nt'
 

15、os.system("bash command") :運行shell命令,直接顯示命令運行結果;並且成功后return 0。

#!/usr/bin/python3

import os

#os.system("command")的shell命令運行成功后會return 0,所以print的結果為0,但是command運行的結果會輸出到屏幕且無法賦值
print("不賦值執行結果:\n",os.system("df -lh"))
#os.system("command")若做賦值操作的話,則是將return的結果賦給a,
print("{:*^80}".format("賦值"))
a = os.system("df -lh >& /dev/null")
print("賦值執行結果:",a)
執行結果:
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   17G  2.6G   15G  15% /
devtmpfs             902M     0  902M   0% /dev
tmpfs                912M     0  912M   0% /dev/shm
tmpfs                912M  8.6M  904M   1% /run
tmpfs                912M     0  912M   0% /sys/fs/cgroup
/dev/sda1           1014M  139M  876M  14% /boot
tmpfs                183M     0  183M   0% /run/user/0 不賦值執行結果: 0
***************************************賦值*************************************** 賦值執行結果: 0

 

  

16、os.popen("bash command"):將運行shell命令的結果return

#!/usr/bin/python3

import os
disk_a = os.popen("df -lh")
disk_b = os.popen("df -lh").read()
print("首次讀取disk_a結果:\n{}".format(disk_a.read()))
#disk_a是os._wrap_close類型,disk_a再被read后,指針會移動到最后,所以再次讀取結果為空
print("再次讀取disk_a結果:\n{}".format(disk_a.read()))

print("首次讀取disk_b結果:\n{}".format(disk_b))
#相當於disk_a被read后的結果賦值給disk_b;disk_b的類型是str,所以可以被多次讀取
print("再次讀取disk_b結果:\n{}".format(disk_b))
執行結果:
首次讀取disk_a結果:
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   17G  2.6G   15G  15% /
devtmpfs             902M     0  902M   0% /dev
tmpfs                912M     0  912M   0% /dev/shm
tmpfs                912M  8.6M  904M   1% /run
tmpfs                912M     0  912M   0% /sys/fs/cgroup
/dev/sda1           1014M  139M  876M  14% /boot
tmpfs                183M     0  183M   0% /run/user/0

再次讀取disk_a結果:

首次讀取disk_b結果:
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   17G  2.6G   15G  15% /
devtmpfs             902M     0  902M   0% /dev
tmpfs                912M     0  912M   0% /dev/shm
tmpfs                912M  8.6M  904M   1% /run
tmpfs                912M     0  912M   0% /sys/fs/cgroup
/dev/sda1           1014M  139M  876M  14% /boot
tmpfs                183M     0  183M   0% /run/user/0

再次讀取disk_b結果:
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   17G  2.6G   15G  15% /
devtmpfs             902M     0  902M   0% /dev
tmpfs                912M     0  912M   0% /dev/shm
tmpfs                912M  8.6M  904M   1% /run
tmpfs                912M     0  912M   0% /sys/fs/cgroup
/dev/sda1           1014M  139M  876M  14% /boot
tmpfs                183M     0  183M   0% /run/user/0

17、os.environ 獲取系統環境變量

#!/usr/bin/python3


import os
a = os.environ
print("Centos7 環境變量:",a)
執行結果:
Centos7 環境變量: environ({'XDG_SESSION_ID': '12', 'HOSTNAME': 'localhost.localdomain', 'SELINUX_ROLE_REQUESTED': '', 'TERM': 'xterm', 'SHELL': '/bin/bash', 'HISTSIZE': '1000', 'SSH_CLIENT': '192.168.1.104 49951 22', 'SELINUX_USE_CURRENT_RANGE': '', 'OLDPWD': '/root', 'SSH_TTY': '/dev/pts/0', 'USER': 'root', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:', 'MAIL': '/var/spool/mail/root', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin', 'PWD': '/tmp', 'LANG': 'en_US.UTF-8', 'SELINUX_LEVEL_REQUESTED': '', 'HISTCONTROL': 'ignoredups', 'SHLVL': '1', 'HOME': '/root', 'LOGNAME': 'root', 'SSH_CONNECTION': '192.168.1.104 49951 192.168.1.200 22', 'LESSOPEN': '||/usr/bin/lesspipe.sh %s', 'XDG_RUNTIME_DIR': '/run/user/0', '_': './pytest9.py'})

18、os.path.abspath(path) :返回path規范化的絕對路徑

>>> import os
>>> os.path.abspath("/etc/sysconfig/network-script///")
'/etc/sysconfig/network-script'

19、os.path.split(path) :將path分割成目錄和文件名二元組返回;或者將path分割最后一個路徑分隔符前的目錄和分隔符后的目錄的二元組返回

#!/usr/bin/python3

import os

path1 = "/etc/sysconfig/network-scripts/"
path2 = "/etc/sysconfig/network-scripts"

print("以路徑分隔符結尾且都是目錄的分隔:",os.path.split(path1))
print("以文件或目錄結尾的分隔:",os.path.split(path2))
執行結果:
以路徑分隔符結尾且都是目錄的分隔: ('/etc/sysconfig/network-scripts', '') 以文件或目錄結尾的分隔: ('/etc/sysconfig', 'network-scripts')

 

20、os.path.dirname(path) :返回path的目錄。其實就是os.path.split(path)的第一個元素

#!/usr/bin/python3

import os

path1 = "/etc/sysconfig/network-scripts/"
path2 = "/etc/sysconfig/network-scripts"

print("以路徑分隔符結尾且都是目錄的分隔:",os.path.dirname(path1))
print("以文件或目錄結尾的分隔:",os.path.dirname(path2))
執行結果:
以路徑分隔符結尾且都是目錄的分隔: /etc/sysconfig/network-scripts 以文件或目錄結尾的分隔: /etc/sysconfig

21、os.path.basename(path) :返回path最后的文件名,即os.path.split(path)的第二個元素。如果path以路徑分隔符結尾,那么就會返回空值。

#!/usr/bin/python3

import os

path1 = "/etc/sysconfig/network-scripts/"
path2 = "/etc/sysconfig/network-scripts"

print("以路徑分隔符結尾且都是目錄的分隔:",os.path.basename(path1))
print("以文件或目錄結尾的分隔:",os.path.basename(path2))
執行結果:
以路徑分隔符結尾且都是目錄的分隔: 以文件或目錄結尾的分隔: network-scripts

22、os.path.exists(path) :如果path存在,返回True;如果path不存在,返回False;用於判斷文件或目錄是否存在

#!/usr/bin/python3

import os

if not os.path.exists("/etc/sysconfig/netif"):
    print("/etc/sysconfig/netif文件不存在!")
else:
    print("/etc/sysconfig/netif文件存在!")

if os.path.exists("/etc/sysconfig/"):
    print("/etc/sysconfig/目錄存在!")
else:
    print("/etc/sysconfig/目錄不存在!")
執行結果:
[root@localhost tmp]# ./pytest12.py 
/etc/sysconfig/netif文件不存在! /etc/sysconfig/目錄存在! #shell命令查看是否正確
[root@localhost tmp]# ls /etc/sysconfig/netif
ls: cannot access /etc/sysconfig/netif: No such file or directory
[root@localhost tmp]# ls /etc/sysconfig/
authconfig  console   crond            firewalld  init              iptables-config  kdump   man-db   netconsole  network-scripts  readonly-root  run-parts  sshd
cbq         cpupower  ebtables-config  grub       ip6tables-config  irqbalance       kernel  modules  network     rdisc            rsyslog        selinux    wpa_supplicant

23、os.path.isabs(path) :如果path是絕對路徑,返回True

#!/usr/bin/python3

import os

path1 = "./py_test1/py_issue"
path2 = "/tmp/py_test1/py_issue"

if os.path.isabs(path1):
    print("{}是絕對路徑!".format(path1))
else:
    print("{}不是絕對路徑!".format(path1))

if os.path.isabs(path2):
    print("{}是絕對路徑!".format(path2))
else:
    print("{}不是絕對路徑!".format(path2))
執行結果:
./py_test1/py_issue不是絕對路徑! /tmp/py_test1/py_issue是絕對路徑!

24、os.path.isfile(path) :如果path是一個存在的文件,返回True。否則返回False

#!/usr/bin/python3

import os

if os.path.isfile("/etc/passwd"):
    print("/etc/passwd文件存在!")
else:
    print("/etc/passwd文件不存在!")
執行結果:
/etc/passwd文件存在!

25、os.path.isdir(path) :如果path是一個存在的目錄,則返回True。否則返回False

#!/usr/bin/python3

import os

if os.path.isdir("/etc/sysconfig"):
    print("/etc/sysconfig目錄存在!")
else:
    print("/etc/sysconfig目錄不存在!")
執行結果:
/etc/sysconfig目錄存在!

26、os.path.join(path1[, path2[, ...]]) :將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略

#!/usr/bin/python3

import os

path1 = "/"
path2 = "etc"
path3 = "sysconfig"
path4 = "network-script"

print(os.path.join(path1,path2,path3,path4))
執行結果:
/etc/sysconfig/network-script

#中間含有絕對路徑
#!/usr/bin/python3

import os

path1 = "/"
path2 = "etc" path3 = "/sysconfig"
path4 = "network-script"

print(os.path.join(path1,path2,path3,path4))
執行結果:
/sysconfig/network-script

27、os.path.getatime(path) :返回path所指向的文件或者目錄的最后存取時間

#!/usr/bin/python3

import os

print(os.path.getatime("/etc/passwd"))
執行結果:
1498506157.930987

28、os.path.getmtime(path) :返回path所指向的文件或者目錄的最后修改時間

!/usr/bin/python3

import os

print(os.path.getctime("/etc/passwd"))
執行結果:
1498504616.4216764

 29、os.path.realpath(path)  :返回path的真實路徑

#!/usr/bin/env python

import os
import sys

path = sys.argv[0]  #獲取執行腳本路徑(執行腳本是可能以絕對路徑也可能是相對路徑)

abspath = os.path.realpath(path)  #將腳本執行路徑轉換為絕對路徑

print(path)
print(abspath)
執行結果:
./pytest25.py
/tmp/pytest25.py

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM