前言
os就是"operating system"的缩写,os模块提供的就是各种python程序与操作系统进行交互的接口。通过使用os模块,能够处理平台间的差异问题,使得编写好的程序无需做任何改动就能在另外的平台上运行。
一、模块变量
os.name
- 功能:导入依赖操作系统模块的名字,指示你正在使用的平台。下面是目前被注册的名字:‘posix’, ‘nt’, ‘mac’, ‘os2’, ‘ce’, ‘java’, ‘riscos’。
其中 ‘posix’ 是 “Portable Operating System Interface of UNIX” (可移植操作系统接口)的缩写。Linux和Mac OS均会返回该值;‘nt’ 是 “Microsoft Windows NT”,因此Windows操作系统会返回该值;‘java’ 则是Java虚拟机环境下的返回值。
举例:在我的电脑(win10)上执行下述代码,返回值是 ‘nt’:
import os
os.name
os.environ
- 功能:可以返回各类环境变量相关信息。返回值是一个映射,其中的各个键值对,键是环境变量名,值则是环境变量对应的值。
举例:其中键为“HOMEPATH”(Windows 下,Linux 下为“HOME”),对应的值就是用户主目录的路径。在我的电脑(win10)上执行下述代码。
import os
os.environ["HOMEPATH"]
二、文件与文件夹
os.getcwd(path)
- 功能:“get the current working directory”,返回当前工作路径的字符串。
在程序运行的过程中,无论物理上程序在实际存储空间的什么地方,当前工作路径即可以认为程序所在的路径;与之相关的"相关路径"、"同目录下模块导入"等相关操作均以"当前工作路径"为准。
举例:在python文件中,返回的则是文件所在的位置。
import os
os.getcwd()
os.chdir(path)
- 功能:“change the directory”,改变当前工作路径。参数既可以是文本或字节型字符串,也可以是一个文件描述符。
注意:若指定目录路径不存在,则会抛出FileNotFoundError异常。
举例:
import os
os.chdir("F:\\python_machine_learing_work\\501_model\\data")
os.getcwd()
os.chdir()方法在实际开发中有许多常见应用场景,包括但不限于:
- 执行某个脚本之前,先切换到脚本所在的目录路径,以确保脚本能够正常运行。
- 在处理文件时,先切换到文件所在的目录路径,方便进行文件的读写操作。
举例:读取文件时,先切换到文件所在的目录路径(os.path.dirname),再读取文件名(os.path.basename)。
def read_file(filepath):
os.chdir(os.path.dirname(filepath)) #os.path.dirname后面会讲到。
return pd.read_csv(os.path.basename(filepath),encoding='utf-8')
file_pos="F:\\python_machine_learing_work\\501_model\\data\\第一次建模用的样本数据\\训练集\\v1_6_feature.csv"
data_pos=read_file(file_pos)
- 在处理多个项目时,切换到不同的项目目录路径,以便于对不同项目的文件和目录进行操作。
os.listdir(path)
- 功能:“list directories”,返回指定当前path下的全部文件夹和文件的名字的列表。这个列表以字母顺序,各元素均为字符串。它不包括 ‘.’ 和 ‘..’ 即使它在文件夹中。
举例:返回指定当前目录下的全部文件夹和文件的名字的列表。
import os
os.listdir("F:\\python_machine_learing_work\\501_model\\data")
举例:返回当前目录下所有文件而非文件夹的名称列表。
import os
def get_filelists(file_dir):
list_directory = os.listdir(file_dir)
filelists = []
for directory in list_directory:
# os.path 模块稍后会讲到
if(os.path.isfile(directory)):
filelists.append(directory)
return filelists
get_filelists("F:\\python_machine_learing_work\\501_model\\data")
举例:与os.walk(path)函数的区别,os.walk(path)列出给定目录中的所有目录、子目录和文件。
os.walk()函数返回一个生成器,该生成器创建一个值元组(current_path,current_path中的目录,current_path中的文件)
import os
os.listdir("F:\\python_test")
import os
dirs=os.walk("F:\\python_test")
for dir in dirs:
print(dir)
os.mkdir(path)
- 功能:“make directory”,新建一个名为path的文件夹。
注意:该函数只能新建一个全新名称文件夹,如果文件夹已经存在,会报FileExistsError异常。
该函数只能在已有的目录路径下面新建一级目录路径,否则(即新建多级目录路径)会报FileNotFoundError异常。如果要新建多级目录路径,可以使用os.makedirs()来完成任务。
举例:新建已经存在的文件夹,会报FileExistsError异常。
import os
os.mkdir("第一次建模用的样本数据")
举例:新建多级目录路径,会报FileNotFoundError异常。
import os
os.mkdir("test\\test_1\\test2")
新建多级目录路径,应该使用makedirs()。
import os
os.makedirs("test\\test_1\\test2")
os.remove(path)
- 功能:删除路径为path的文件。
注意:如果path是路径是文件夹而非文件的话,会报FileNotFoundError异常。删除文件夹应该使用os.rmdir()函数。
举例:删除文件,运行成功。
import os
os.remove("F:\\python_machine_learing_work\\501_model\\data\\test\\test.txt")
举例:删除文件夹,会报FileNotFoundError异常。
import os
os.remove("F:\\python_machine_learing_work\\501_model\\data\\test")
os.rename(src,dst)
- 功能:是将文件或路径重命名,即将src指向的文件或文件夹重命名为dst指定的名称。
注意:如果指定的目标文件或者文件夹在其他路径下,该函数还可实现文件或者文件夹的“剪切并粘贴”功能。但无论直接原地重命名还是“剪切粘贴”,中间目录路径都必须要存在,否则就会报FileNotFoundError异常。如果该文件或者文件夹已存在,会报FileExistsError异常。
举例:同一个文件夹下面重命名。
import os
os.rename("F:\\python_machine_learing_work\\501_model\\data\\test","F:\\python_machine_learing_work\\501_model\\data\\test_new")
举例:不同文件夹下面重命名,可实现文件或者文件夹的“剪切并粘贴”功能。
import os ,
os.rename("F:\\python_machine_learing_work\\501_model\\data\\test","F:\\python_machine_learing_work\\501_model\\test_new")
举例:如果该文件或者文件夹已存在,会报FileExistsError异常。
import os
os.rename("F:\\python_machine_learing_work\\501_model\\data\\test_new","F:\\python_machine_learing_work\\501_model\\test_new")
举例:如果中间目录路径都必须不存在,就会报FileNotFoundError异常。
import os
os.rename("F:\\python_machine_learing_work\\501_model\\data\\test_new","F:\\python_machine_learing_work\\test\\test_new")
三、os的子模块:Path模块
os.path.abspath(path)
- 功能:将传入路径规范化,返回一个相应的绝对路径格式的字符串。
举例:当传入路径符合“绝对路径”的格式时,该函数仅仅将路径分隔符替换为适应当前系统的字符,不做其他任何操作,并将结果返回。所谓“绝对路径的格式”,其实指的就是一个字母加冒号,之后跟分隔符和字符串序列的格式:
import os
os.path.abspath("F:\python_machine_learing_work")
举例:当指定的路径不符合上述格式时,该函数会自动获取当前工作路径,并使用os.path.join()函数将其与传入的参数组合成为一个新的路径字符串。
import os
os.path.abspath("hello")
os.path.basename(path)
- 功能:返回文件名,即传入路径的最下级目录名或者文件名。
举例:
import os
os.path.basename("F:\\python_machine_learing_work")
os.path.dirname(path)
- 功能:返回文件路径。即最后一个分隔符前的整个字符串。
举例:
import os
os.path.dirname("F:\\python_machine_learing_work\\501_model\\data\\第一次建模用的样本数据")
os.path.split(path)
- 功能: 把路径分割成 dirname 和 basename,返回一个元组。即是将path以最后一个分隔符为界,分成两个字符串,前os.path.dirname()和os.path.basename()的返回值分别是函数os.path.split()返回值的第一、第二个元素。
举例:
import os
os.path.split("F:\\python_machine_learing_work\\501_model\\data")
os.path.join(path1[,path2[,…])
- 功能:把目录路径与文件名合成一个路径。传入的字符要为字符串,所以一般的用法是将第一个参数作为父级目录,之后每一个参数即使下一级目录,从而组合成一个新的符合逻辑的目录路径。
举例:
import os
os.path.join("F:\\", "python_machine_learing_work")
举例:如果传入路径中存在一个“绝对路径”格式的字符串,且这个字符串不是函数的第一个参数,那么其他在这个参数之前的所有参数都会被丢弃,余下的参数再进行组合。更准确地说,只有最后一个“绝对路径”及其之后的参数才会体现在返回结果中。
import os
os.path.join("just", "do", "D:\\", "python", "dot", "F:\\", "python_machine_learing_work")
os.path.exists(path)
- 功能:判断路径是否存在,存在则返回 True,路径损坏返回 False。
举例:
import os
os.path.exists("F:\\python_machine_learing_work")
举例:
import os
os.path.exists("F:\\python_machine_learing_work\\test")
os.path.isabs(path)
- 功能:判断是否为绝对路径,是则返回 True,否返回 False。
举例:
import os
os.path.isabs("F:\\python_machine_learing_work")
os.path.isfile(path)
- 功能:判断路径是否为文件,是则返回 True,否返回 False。
举例:
import os
os.path.isfile("F:\\python_machine_learing_work")
os.path.isdir(path)
- 功能:判断路径是否为目录,是则返回 True,否返回 False。
举例:
import os
os.path.isdir("F:\\python_machine_learing_work")
四、实际应用
- 举例1:判断目录是否存在,不存在则创建
import os
dirs=".//test"
if not os.path.exists(dirs):
os.makedir(dirs)
参考文章:
https://zhuanlan.zhihu.com/p/150835193
https://blog.donothing.site/2015/08/02/python-os/#os-path