os模块是Python中整理文件和目录最为常用的模块,该模块提供了非常丰富的方法用来处理文件和目录。
>>>os.name
'nt'
nt: windows系统 posix: Linux系统
>>> os.linesep
'\r\n' # windows换行符
>>> os.linesep
'\n' # Linux换行符
>>>os.sep
'\\'
windows下路径分隔符:“
\\
” Linux下路径分隔符: “/
”
>>> os.environ
# environ({'XDG_SESSION_ID': '1526', 'HOSTNAME': 'server-ming', 'TERM': 'xterm', 'SHELL': '/bin/bash', 'HISTSIZE': '1000', 'SSH_CLIENT': '124.202.173.218 2098 22', 'SSH_TTY': '/dev/pts/1', 'USER': 'root', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin', 'PWD': '/root', 'LANG': 'en_US.UTF-8', 'HISTCONTROL': 'ignoredups', 'SHLVL': '1', 'HOME': '/root', 'LOGNAME': 'root', 'SSH_CONNECTION': '124.202.173.218 2098 172.26.52.195 22', 'LESSOPEN': '||/usr/bin/lesspipe.sh %s', 'XDG_RUNTIME_DIR': '/run/user/0', '_': '/usr/bin/python3'})
# Linux下获取当前用户
>>> os.environ.get("USER")
'root'
# windows下获取当前用户
>>> os.environ.get("CURRENT_USER_NAME")
'Administrator'
# Linux下获取计算机名称
>>> os.getenv("HOSTNAME")
'server-ming'
# windows下获取计算机名称
>>> os.getenv("MY_COMPUTER_NAME")
'ADTEC-MING'
>>> os.cpu_count()
8
适用于Linux操作系统
>>> unames = os.uname()
>>> unames
posix.uname_result(sysname='Linux', nodename='server-ming', release='3.10.0-957.21.3.el7.x86_64', version='#1 SMP Tue Jun 18 16:35:19 UTC 2019', machine='x86_64')
>>> unames.sysname
'Linux'
>>> unames.machine
'x86_64'
>>> os.getlogin()
'root'
print(os.getcwd()) # d:\mycode\pycode
获取当前目录下的某个文件的绝对路径,文件存不存在都会返回
print(os.path.abspath(__file__))
# d:\mycode\pycode\demo.py __file__指当前文件
print(os.path.split("d:\\mycode\\pycode\\demo.py"))
# ('d:\\mycode\\pycode', 'demo.py')
print(os.path.dirname("d:\\mycode\\pycode\\demo.py"))
# d:\mycode\pycode
print(os.path.basename("d:\\mycode\\pycode\\demo.py"))
# demo.py
print(os.path.join(os.getcwd(), 'mytest'))
# D:\mycode\pycode\mytest
from datetime import datetime
path_atime = os.path.getatime('d:\\mycode\\pycode\\mytest')
print(datetime.fromtimestamp(path_atime))
# 2022-06-21 10:41:12.095125
from datetime import datetime
path_ctime = os.path.getctime('d:\\mycode\\pycode\\mytest')
print(datetime.fromtimestamp(path_ctime))
# 2022-06-21 10:04:53.622260
from datetime import datetime
path_mtime = os.path.getmtime('d:\\mycode\\pycode\\mytest')
print(datetime.fromtimestamp(path_mtime))
# 2022-06-21 10:41:12.095125
print(os.path.getsize("d:\\mycode\\pycode\\demo.py"))
# 3555
获取路径下文件的内容的大小,为空时返回0, 如果路径不存在,则会报错。
print(os.path.isabs("d:\\mycode\\pycode"))
# True
print(os.path.exists("d:\\mycode\\pycode\\mylogs"))
# False
print(os.path.isfile("d:\\mycode\\pycode\\mylogs")) # False
print(os.path.isfile("d:\\mycode\\pycode\\123.py")) # False
print(os.path.isfile("d:\\mycode\\pycode\\demo.py")) # True
如果被判断的路径不是文件或者路径下文件不存在,则返回False,否则话,返回True
print(os.path.isdir("d:\\mycode\\pycode\\demo.py")) # False
print(os.path.isdir("d:\\mycode\\pycode\\demo")) # False
print(os.path.isdir("d:\\mycode\\pycode")) # True
如果被判断的路径是文件或者文件夹不存在,则返回False。否则返回True.
print(os.access("c:\\windows\\system32\\drivers\\etc\\hosts"))
# False
dir_path = "d:\\mycode"
print(os.listdir(dir_path))
# ['DevOps', 'DjangoBlog', 'DjangoBlog.xml', 'djcode', 'gocode', 'nginx.conf', 'pycode', 'vuecode']
列出路径下所有的文件,并以列表形式返回。
os.mkdir("d:\\mycode\\pycode\\mylogs")
# 判断目录是否存在,如果不存在,创建
if not os.path.exists("d:\\mycode\\pycode\\mylogs"):
os.mkdir("d:\\mycode\\pycode\\mylogs")
如果创建的目录存在,会抛出异常。FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。
递归创建目录。如果创建的子目录存在,会抛出异常。
os.makedirs("d:\\mytest\\test")
if not os.path.exists("d:\\mytest\\test"):
os.makedirs("d:\\mytest\\test")
单个删除目录,如果目录不为空,不进行操作
os.rmdir("d:\\mytest\\test")
os.rmdir("d:\\mytest")
要删除的目录不存在会抛出异常:FileNotFoundError: [WinError 2] 系统找不到指定的文件。
要删除的目录不为空时抛出异常:OSError: [WinError 145] 目录不是空的。
归删除目录。 如果子目录成功删除,则removeirs会尝试依次删除路径中显示的每个父目录。如果子目录无法成功删除,则引发OSError。
os.removedirs("d:\\mytest\\test")
os.remove("d:\\mycode\\pycode\\mytest\\11.py") # 删除成功
os.remove("d:\\mycode\\pycode\\mytest")
如果删除的内容是一个文件夹抛出异常: PermissionError: [WinError 5] 拒绝访问。
os.rename("d:\\mycode\\pycode\\mytest", "d:\\mycode\pycode\\new_test")
os.chmod("c:\\windows\\system32\\drivers\\etc\\hosts", stat.S_IRWXG)
序号 | 内容 | 说明 |
---|---|---|
1 | stat.S_ISUID | 执行时设置用户ID |
2 | stat.S_ISGID | 执行时设置组ID。 |
3 | stat.S_ENFMT | 执行记录锁定。 |
4 | stat.S_ISVTX | 执行后保存文本映像 |
5 | stat.S_IREAD | 由所有者读取 |
6 | stat.S_IWRITE | 由拥有者写入 |
7 | stat.S_IEXEC | 由所有者执行 |
8 | stat.S_IRWXU | 由所有者读取,写入和执行 |
9 | stat.S_IRUSR | 由拥有者读取 |
10 | stat.S_IWUSR | 由拥有者写入 |
11 | stat.S_IXUSR | 由所有者执行 |
12 | stat.S_IRWXG | 按组读取,写入和执行 |
13 | stat.S_IRGRP | 按组读取 |
14 | stat.S_IWGRP | 按组写入 |
15 | stat.S_IXGRP | 按组执行 |
16 | stat.S_IRWXO | 由其他人读取,写入和执行 |
17 | stat.S_IROTH | 其他人读取 |
18 | stat.S_IWOTH | 由他人写 |
19 | stat.S_IXOTH | 由他人执行 |