大家好!我是Uncle Ben,微信号:jiaszwx
今天跟大家聊一下Python自带的os模块常见用法。欢迎大家留言讨论!
os这个模块是Python自带的一个模块,也算是比较常用的模块之一了。那这个模块到底能干啥呢?今天我们就来一起研究一下。
从名字来看,os = operation system,那肯定是跟操作系统相关的了。
那第一个问题来了:可以直接使用么?答案是肯定的,但是需要提前导入一下这个模块就可以了。
举例
导入模块
import os
那么用Python怎么知道当前操作系统是什么操作系统(Windows,Linux)呢?
获取操作系统名称
import os
print(os.name)
# 运行结果:
nt
Process finished with exit code 0
【注意】
返回结果的意义
nt = Windows
posix = Linux or Mac
另外还有一个模块叫platform,想了解的同学可以自行搜索一下和os模块的区别。
获取环境变量
敲黑板,重要的知识点!!!
import os
my_env = os.environ
print(my_env)
print(my_env.get('HOME'))
# 运行结果:
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\username\\AppData\\Roaming',...
'OS': 'Windows_NT', 'PATH': 'C:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\pywin32_system32;C:\\Program Files (x86)\\Microsoft SDKs\\Azure\\CLI2\\wbin;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;', 'HOME': 'C:\\Users\\username', 'USERDNSDOMAIN': 'ABC.COM', 'USERDOMAIN': 'ABC', 'USERDOMAIN_ROAMINGPROFILE': 'ABC', 'USERNAME': 'username', 'USERPROFILE': 'C:\\Users\\username', ...})
C:\Users\username
【说明】
比如在Windows上,你要把文件保存到当前用户的Documents文件夹下,其实完整的目录路径是:C:\Users\username\Documents
其中的username是变化的,不同的用户登录系统,都有自己的Documents文件夹。所以这个时候就要用到环境变量里的内容了,而且关于各种各样的环境变量信息你都可以在os.environ里找到。
运行系统命令
#例一
import os
print(os.system("python --version"))
# 运行结果:
Python 3.7.9
0
#################################################
#例二
import os
print(os.system("powershell get-process"))
# 运行结果:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
207 14 3256 9968 0.84 12256 1 AeXAgentUIHost
831 53 53180 7876 11568 0 AeXNSAgent
510 28 26068 20288 1.66 16740 1 ApplicationFrameHost
159 9 2460 4704 5740 0 armsvc
522 27 6624 15080 22.59 6024 1 AuthManSvr
... .. .... ... ... ... . ...
0
【注意】
上面运行结果中最后一行输出的是0,这个就是代表命令执行成功。如果返回结果是非0,那就代表命令执行没有成功。
获取当前工作目录
os.getcwd()
import os
print(os.getcwd())
# 运行结果:
C:\lab\pythonlab\BigDataBasic\Big_Data_Basic_Session3
【说明】
当前执行.py文件的当前路径
获取指定目录下的文件或文件夹
import os
my_path = r"C:\lab\pythonlab"
print(os.listdir(my_path))
# 运行结果:
['.idea', '05_btc_data_analytics_training', 'bbbbtest.txt', 'BigDataBasic', 'demo.md', 'departmentnamelist.txt', 'digital-talents', 'femal.png', 'file_demo.py', 'FOA_Archi_V0.9.pdf', 'incubator-echarts-4.9.0-rc.1', 'Intel', 'man.png', 'orderform', 'pwd.txt', 'Python Basic Best Practice Share.md', 'Python Basic Session02.md', 'Python Basic Session02_input_while_function.pdf', 'sff_basic_homework', 'Template - Copy.xlsx', 'Template.xlsx', 'Template_FOA_final_20200228.xlsx', 'write_file_demo.txt', 'zen_of_python_cn.txt', 'zen_of_python_en.txt']
Process finished with exit code 0
【说明】不包括子目录下的文件和文件夹
更改工作目录
os.chdir("target_path")
import os
print(os.getcwd())
print(os.chdir(r"c:\temp"))
print(os.getcwd())
# 运行结果:
C:\lab\pythonlab\BigDataBasic\Big_Data_Basic_Session3
None
c:\temp
如果目标路径不存在会是怎么样呢?你会得到一个FileNotFoundError,见下:
import os
os.chdir(r"c:\temp\abc")
# 运行结果:
Traceback (most recent call last):
File "C:/lab/pythonlab/BigDataBasic/Big_Data_Basic_Session3/pkg_module_demo.py", line 5, in <module>
os.chdir(r"c:\temp\abc")
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'c:\\temp\\abc'
Process finished with exit code 1
目录路径与文件名拼接
import os
my_dir = r"C:\lab\pythonlab"
my_file = "zen_of_python_en.txt"
print(os.path.join(my_dir, my_file))
# 运行结果:
C:\lab\pythonlab\zen_of_python_en.txt
Process finished with exit code 0
判断给定路径是否为目录
import os
path1 = r"C:\lab\pythonlab\BigDataBasic"
path2 = r"C:\lab\pythonlab\BigDataBasic\Big_Data_Basic_Session3\pkg_module_demo.py"
print(os.path.isdir(path1))
print(os.path.isdir(path2))
# 运行结果:
True
False
Process finished with exit code 0
获取文件路径中的目录名
import os
file_path = r"C:\lab\pythonlab\demo.md"
print(os.path.dirname(file_path))
# 运行结果:
C:\lab\pythonlab
Process finished with exit code 0
判断给定路径是否为文件
import os
path1 = r"C:\lab\pythonlab\BigDataBasic"
path2 = r"C:\lab\pythonlab\BigDataBasic\Big_Data_Basic_Session3\pkg_module_demo.py"
print(os.path.isfile(path1))
print(os.path.isfile(path2))
# 运行结果:
False
True
Process finished with exit code 0
判断文件或者目录是否存在
import os
path1 = r"C:\lab\pythonlab\BigDataBasic"
path2 = r"C:\lab\pythonlab\BigDataBasic\Big_Data_Basic_Session3\pkg_module_demo.py"
path3 = r"C:\lab\nofolder"
path4 = r"C:\lab\nofolder\nofile.txt"
print(os.path.exists(path1))
print(os.path.exists(path2))
print(os.path.exists(path3))
print(os.path.exists(path4))
# 运行结果:
True
True
False
False
Process finished with exit code 0
获取目录路径中的文件名
方法1:
import os
file_path = r"C:\lab\pythonlab\Python Basic Session02_input_while_function.pdf"
print(os.path.basename(file_path))
# 运行结果:
Python Basic Session02_input_while_function.pdf
Process finished with exit code 0
方法2:
import os
path1 = r"C:\lab\pythonlab\BigDataBasic"
path2 = r"C:\lab\pythonlab\BigDataBasic\Big_Data_Basic_Session3\pkg_module_demo.py"
print(os.path.split(path1))
print(os.path.split(path2))
print(os.path.split(path2)[-1])
# 运行结果:
('C:\\lab\\pythonlab', 'BigDataBasic')
('C:\\lab\\pythonlab\\BigDataBasic\\Big_Data_Basic_Session3', 'pkg_module_demo.py')
pkg_module_demo.py
Process finished with exit code 0
获取文件扩展名
import os
file_path = r"C:\lab\pythonlab\demo.md"
print(os.path.splitext(file_path))
print(os.path.splitext(file_path)[-1])
# 运行结果:
('C:\\lab\\pythonlab\\demo', '.md')
.md
Process finished with exit code 0
列出指定目录下所有文件的文件名
import os
my_path = r"C:\lab\pythonlab\BigDataBasic\Big_Data_Basic_Session3"
print(os.listdir(my_path))
print(os.walk(my_path))
for file in os.walk(my_path):
print(file)
# 运行结果:
['mypackage', 'pkg_module_demo.py']
<generator object walk at 0x000002137F20BD48>
('C:\\lab\\pythonlab\\BigDataBasic\\Big_Data_Basic_Session3', ['mypackage'], ['pkg_module_demo.py'])
('C:\\lab\\pythonlab\\BigDataBasic\\Big_Data_Basic_Session3\\mypackage', [], ['__init__.py'])
【说明】
包括子文件夹中的文件名
删除文件
import os
file_path = r"C:\lab\pythonlab\testfile.txt"
print(os.remove(file_path))
os.remove(r"C:\temp\test")
# 运行结果:
None
PermissionError: [WinError 5] Access is denied: 'C:\\temp\\test'
Process finished with exit code 1
【说明】
如果给定的路径是一个文件夹路径,Python会抛出:PermissionError: [WinError 5] Access is denied: 'C:\temp\test',即使test文件夹为空文件夹。
删除文件夹
import os
os.rmdir(r"C:\temp\test")
# 运行结果:
Process finished with exit code 0
说明:os.rmdir(path)这个方法中,文件夹必须为空,否则会抛出异常:OSError: [WinError 145] The directory is not empty: 'C:\temp'
Traceback (most recent call last):
File "C:/lab/pythonlab/BigDataBasic/Big_Data_Basic_Session3/pkg_module_demo.py", line 95, in <module>
os.rmdir(r"C:\temp")
OSError: [WinError 145] The directory is not empty: 'C:\\temp'
Process finished with exit code 1
重命名文件或文件夹名
文件重命名
import os
# 方法1
# file_name = "name1.txt"
# new_name = "name2.txt"
# base_dir = r"C:\temp\test"
# os.rename(os.path.join(base_dir, file_name), os.path.join(base_dir, new_name))
file_path = r"C:\lab\pythonlab\testfile.txt"
base_dir = os.path.dirname(file_path)
os.chdir(base_dir)
os.rename("testfile.txt", "rename.txt")
# 运行结果:
Process finished with exit code 0
文件夹重命名
import os
file_path = r"C:\temp\testfolder"
base_dir = os.path.dirname(file_path)
os.rename(base_dir, r"C:\temp\newtestfolder")
# 运行结果:
Process finished with exit code 0
练练手
练习题 1
判断当前系统并输出系统名称:Linux或Windows
获取当前用户名以及域名信息并输出
输出格式:域名\用户名
练习题 2
重命名一个文件夹
重命名一个文件
练习题 3
模拟用户保存文件到指定目录:
文件名:os_homework.txt
文件内容:用户可以自定义,随便输入内容
如果该文件已存在,提示用户:该文件已存在
如果目录不存在,帮助用户自动创建目录
【提示】:需要用with open()
觉得还不错?点个👍呗!