python os模块
记录os模块常用的函数
os.path常用函数
? 在没有特殊说明下,strPath可以是相对路径或者绝对路径;同时需要注意大多数os.path都相当于字符串操作,并没有进行输入strPath是否存在,是否有效的判断。
-
__file__返回当前python文件的关于工作目录的相对路径 -
os.path.join(StrPath, *paths) 函数用于路径拼接文件路径,可以传入多个参数
- 其实就是拼接字符串,不关心文件是否存在
- 从第二参数开始每个参数,如果使用/打头,默认直接返回该参数。
-
os.path.exists(StrPath) 返回一个bool型对象,判断括号里的文件或者目录是否存在的意思
-
os.path.isdir(strPath) 返回bool型对象,判断strPath 是不是一个文件目录 -
os.path.idfile(strPath) 返回bool型对象,判断strPath 是不是一个文件 -
os.path.dirname(strPath) 返回一个strPath所在的目录
- 其实根据文件分割符’/’,取倒数第一个文件分隔符之前的子串,不关心strPath是否存在
-
os.path.basename(strPath) 返回一个strPath所在的目录
- 其实根据文件分割符’/’,取倒数第一个文件分隔符之后的子串,不关心strPath是否存在
-
os.path.abspath(strPath) 返回strPath对应的绝对路径
- 如果strPath是存在的,绝对路径,直接返回。否则返回将工作目录(终端位置)和strPath使用join结合的路径,相当于只是个字符串拼接。
-
os.path.relpath(path[, start]) 返回strPath对应的相对路径.
- start=None,返回相对于工作目录的路径,即path
- path=aaa/bbb/ccc/ddd, start= aaa/bbb,返回相对于工作目录+start的目录(os.getcwd/aaa/bbb),即返回ccc/ddd
-
os.split(strPath) 对strPath进行分割,分割出目录名和文件名
- 如果strPath是一个文件类型如 aaa/bbb/ccc.txt,则返回(aaa/bbb/, ccc.txt)
- 如果trPath是一个目录类型 aaa/bbb/ccc/ ,则返回(aaa/bbb/ccc/, ‘’)
- 其实分割并不智能,只是根据最后一个文件分割符’/’,将strPath 字符串分割成为两部分。
-
os.path.splitext(strPath) 对strPath进行分割,分割出目录名和扩展名
- 本质根据strPath中的最后一个’.’,进行分割,输入aaa/bbb.txt ,返回(aaa/bbb,txt)
-
os.path.expanduser(strPath) 主要对家目录’~'进行替换,linux下替换成为/home/xxx/,
- 注意在使用os模块中,不要使用"~/aaa/bbb/"类型的路径,先用该函数替换
-
os.path.normpath(strPath) 范化指定的路径strPath。在路径规范化过程中包括消除所有冗余分隔符(aaa///bbb→aaa/bbb),并且对./及../进行折叠(aaa/./bbb/../ccc →aaa/ccc)。
import os
print('#'*20+' test for os.path.join '+'#'*20)
join_path=os.path.join('aaa','bbb/ccc')
print(join_path)
join_path=os.path.join('aaa','/bbb/ccc')
print(join_path)
print('#'*20+' test for os.path.exists '+'#'*20)
is_exist= os.path.exists(join_path)
print('join_path is exists {}'.format(is_exist))
is_exist = os.path.exists(__file__)
print('__file__ is exists {}'.format(is_exist))
file_dir = os.path.dirname(__file__)
is_exist = os.path.exists(file_dir)
print('directory of __file__ is exist: {}'.format(is_exist))
print('#'*20+' test for os.path.dirname '+'#'*20)
dir_name = os.path.dirname('aaa/bbb/ccc')
print("dir_name of aaa/bbb/ccc is {name}".format(name=dir_name))
print('#'*20+' test for os.path.basename'+'#'*20)
base_name=os.path.basename('aaa/bbb/ccc')
print("dir_name of aaa/bbb/ccc is {base}".format(base=base_name))
base_name=os.path.basename('aaa/bbb/ccc/')
print("dir_name of aaa/bbb/ccc/ is {base}".format(base=base_name))
print('#'*20+' test for os.path.isdir()'+'#'*20)
is_dir=os.path.isdir("aaa/bbb/ccc")
print("aaa/bbb/ccc is a directory : {}".format(is_dir))
is_dir=os.path.isdir(os.path.dirname(__file__))
print("dirname of __file__ is a directory : {}".format(is_dir))
print('#'*20+' test for os.path.isfile()'+'#'*20)
is_file=os.path.isfile("aaa/bbb/ccc/ddd.txt")
print("aaa/bbb/ccc/ddd.txt is a directory : {}".format(is_file))
is_file=os.path.isfile(__file__)
print(" __file__ is a file : {}".format(is_file))
print('#'*20+' test for os.path.abspath()'+'#'*20)
abs_file = os.path.abspath("aaa/bbb/ccc")
print("abs_file of aaa/bbb/ccc is {}".format(abs_file))
abs_file = os.path.abspath(__file__)
print("abs_file of __file__ is {}".format(abs_file))
print('#'*20+' test for os.path.relpath()'+'#'*20)
rel_file = os.path.relpath("aaa/bbb/ccc",start=None)
print("rel_file of aaa/bbb/ccc with start=None is {}".format(rel_file))
rel_file = os.path.relpath("aaa/bbb/ccc",start='aaa')
print("rel_file of aaa/bbb/ccc with start=aaa is {}".format(rel_file))
rel_file = os.path.relpath("aaa/bbb/ccc",start='aaa/bbb')
print("rel_file of aaa/bbb/ccc with start=aaa/bbb is {}".format(rel_file))
rel_file = os.path.relpath("aaa/bbb/ccc",start='aaa/bbb/ccc')
print("rel_file of aaa/bbb/ccc with start=aaa/bbb/ccc is {}".format(rel_file))
print('#'*20+' test for os.path.split()'+'#'*20)
split_file = os.path.split("aaa")
print("split_file of aaa is {}".format(split_file))
split_file = os.path.split("aaa/bbb/ccc/")
split_file = os.path.split("aaa/bbb/ccc")
print("split_file of aaa/bbb/ccc is {}".format(split_file))
split_file = os.path.split("aaa/bbb/ccc/")
print("split_file of aaa/bbb/ccc/ is {}".format(split_file))
print('#'*20+' test for os.path.splitext()'+'#'*20)
splitext_file = os.path.splitext("aaa/bbb/ccc/ddd.txt")
print("splitext_file of aaa/bbb/ccc/ddd.txt is {}".format(splitext_file))
print('#'*20+' test for os.path.normpath()'+'#'*20)
normpath_file = os.path.normpath("aaa/bbb/.///../ddd.txt")
print("normpath_file of aaa/bbb/.///../ddd.txt is {}".format(normpath_file))
os 常用函数
-
os.getcwd() 返回执行py文件时候中终端位置,效果同Shell中的pwd -
os.chdir(strPath) 改变当前工作目录到指定的路径strPath,在python文件中使用相对路径(相对于工作目录),我们可以先使用该函数切换到指定工作目录。 -
os.listdir(strPath) 用于返回路径strPath中由文件名和目录名组成的列表。 -
os.system(“command”) 在python中执行linux命令或shell脚本,执行命令返回执行命令后的状态码。 -
os.popen(“command”) 在python中执行linux命令或shell脚本,执行命令以文件对象返回命令输出内容。
- 非阻塞的执行命令(执行os.popen(“command”)同时,向下执行其他python命令)
- 想要阻塞,处理方法是使用read()或readlines()对命令的执行结果进行读操作,注意如果command命令是交互式的(ping 127.0.0.1 会一直在ping),使用读操作会造成完全阻塞。
import os
print('\n'+'#'*20+' test for os.getcwd()'+'#'*20)
cur_path = os.getcwd()
print(f'cur_path is {cur_path}')
print('\n'+'#'*20+' test for os.getcwd()'+'#'*20)
os.chdir('./test1')
cur_path = os.getcwd()
print('after chdir cur_path is {}'.format(cur_path))
with open('a.txt','r') as fin:
print('after chdir, we can find the file a.txt using relative dir,\n content in a.txt is {}'.format(fin.read()))
print('\n'+'#'*20+' test for os.listdir()'+'#'*20)
dir_list = os.listdir('./')
print('dir_list is {}'.format(dir_list))
print('\n'+'#'*20+' test for os.system()'+'#'*20)
flag = os.system('ls -la')
if flag==0:
print('os.system() success')
else:
print('os.system() fail')
print('\n'+'#'*20+' test for os.popen()'+'#'*20)
with os.popen('ls -la') as fin:
for line in fin.readlines():
line=line.strip()
print('from os.popen '+ line)
|