Python中大多数系统级接口都集中在两个模块: sys和os
———《Programming Python》
sys与os都是大型的模块,提供了基础的系统接口,我们先简单看一下它们各有什么基础功能
>>>import sys, os
>>>len(dir(sys)), len(dir(os)) # This shows
(65, 122)
可见这两个模块的属性列表都是非常长的,以下是一些基础操作
os.path.isdir,
os.path.isfile,
os.exists,
os.path.getsize
顾名思义,这是用来查看路径/文件是否存在的,getsize可以获取文件大小(kb)
>>> import os
>>> os.path.isdir(r"C:\Users")
True
# "C:Users", r"C:\Users", "C:Users"
>>>os.path.getsize(r'C:\Users')
4096
>>>os.path.exists(r"C:\Users\Myself\Appdata")
True
os.path.split,
os.path.join,
os.path.dirname,
os.path.basename
这些方法主要是对一个路径进行具体处理,默认按照dirname, basename的方式进行分解或组合
>>>a = os.path.split(r"C:\temp\data.txt")
... print(a)
('C:\\temp', 'data.txty')
>>>os.path.join(*a)
'C:\temp\data.txt'
可以看出split与join是一对功能互异的方法
>>>file_loc = r"C:\Users\test.csv"
>>>os.path.dirname(file_loc), os.path.basename(file_loc)
('C:\\Users', 'test.csv')
# 这里使用了Windows风格的路径表示
除此之外,我们也可以使用字符串的split以及join方法简单类似实现,例如
>>>pathname = r'D:\envs\WebView\Scripts\wheel.py'
>>>pathname.split(os.sep)
['D:', 'envs', 'WebView', 'Scripts', 'wheel.py']
# 注意这里的os.sep,这可以被设置,也会在不同的平台下初始
>>>os.sep.join(pathname.split(os.sep))
'D:\\envs\\WebView\\Scripts\\wheel.py'
注意os模块下的os.path.normpath也很好用,可以用来规范一个路径,用法如下
>>>os.path.normpath('C:User\Lenove//test')
'C:User\\Lenove\\test'
os.path.abspath
根据传入的相对/绝对路径返回对应的绝对路径
>>>os.path.abspath('') == os.getcwd()
True
# 表明abspath可以以当前目录为根据,
# ‘’是相对路径的写法, 等同于'.'记法
>>>rela_loc = ['.', '..', '../tmp', 'tmp/test.txt']
# 先来测试相对路径表示方法
>>>print('\n'.join(os.path.abspath(i) for i in rela_loc))
D:\Items\PythonFiles\systest
D:\Items\PythonFiles
D:\Items\PythonFiles\tmp
D:\Items\PythonFiles\systest\tmp\test.txt
>>>abs_loc = [r"C:/", r"C:\Users", r"D:\Anaconda\DLLs"]
>>>print('\n'.join(os.path.abspath(i) for i in abs_loc))
C:\
C:\Users
D:\Anaconda\DLLs
os.system,
os.popen
在Python脚本中运行shell命令(不同环境下shell种类有所不同,如Windows的MS-DOS,Linux、Mac OS X的xterm等)
>>>repr(os.system)
''
>>>os.system("dir") # MS-DOS命令
D:\Items\PythonFiles\systest 的目录
2019/03/22 22:40
2019/03/22 22:40
2019/03/16 09:34 455 cmd_test1.py
2019/03/22 22:40 30 helloshell.py
6 个文件 1,975 字节
2 个目录 16,477,257,728 可用字节
>>> # 可见这里system方法与正常在命令行里执行的结果是一致的
os.popen(cmd, mode, buffering)
>>>content = os.popen("dir").read()
>>>print(content)
D:\Items\PythonFiles\systest 的目录
2019/03/22 22:40
2019/03/22 22:40
2019/03/16 09:34 455 cmd_test1.py
2019/03/22 22:40 30 helloshell.py
6 个文件 1,975 字节
2 个目录 16,477,257,728 可用字节
>>> # 不难发现通过os.popen可以将命令结果定向输出
首次修改与 2019/3/22