python强大的API赋予了我们快捷操作路径的方式,为我们熟知的os.path模块就是专门操作路径的。
这里解释一下为什么要用API呢?路径不就是字符串么,我直接拼接就ok了啊。
第一,因为快捷,你可以根据API,一两句代码就搞定了路径问题,而拼接需要更多的代码,而且容易出错。
第二,常用操作系统大致分为两类,window和类Unix系统(包括Mac OSX和Linux),由于使用的文件系统不同,所使用的路径分隔符也不同,自己拼接的需要考虑到跨平台性。
测试代码如下:
"""
created by nzh
Date: 2018/12/2 10:45 PM
"""
import os
path_list = ['Users', 'nzh', 'temp']
path = os.path.join('Users', 'nzh', 'temp', 'dockerImage')
# print(path)
# 获取当前工作路径
current_path = os.getcwd()
# print(current_path)
# 改变当前工作路径
# change_to_dir = '/Users/nzh/temp'
# os.chdir(change_to_dir)
# print(os.getcwd())
# 如果要切换到的路径不存在,则会引发FileNotFoundError异常
# change_to_dir = '/NotExistPath'
# os.chdir(change_to_dir)
# 绝对路径 & 相对路径
# 绝对路径是从根目录开始到目标目录的路径
# 相对路径是从当前工作目录开始到目标目录的路径
# 两个特殊符号'.' 和'..'
# '.'代表当前目录,'..'代表父目录
# 创建新文件夹
# 如果只写文件名,会在当前目录下创建
# 但是如果这个文件夹已经存在了,则会引发FileExistsError
# os.makedirs('test')
# 如果指定文件夹的绝对路径,则会在指定的绝对路径下创建目录
# os.makedirs('/Users/nzh/temp/testdir')
# 把相对路径转换为绝对路径
dir_path = 'test'
abspath = os.path.abspath(dir_path)
# print(abspath)
# 判断路径是绝对路径还是相对路径
is_abspath = os.path.isabs(abspath)
# print(is_abspath)
# 返回从start到path的相对路径的字符串
# os.path.relpath(path, start)
# 结果是,去掉path中start部分的字符串
relpath = os.path.relpath(abspath, '/Users/nzh')
# print(relpath)
# 还能用来计算两个目录路径之间的相对路径
# 比如,你想知道'test'目录和'/Users/nzh/temp'目录之间的相对路径
# 先搞清楚以谁为参照目录,就是start。
# 换句话说就是,从start到path的相对路径
relpath = os.path.relpath('/Users/nzh/temp', 'test')
# print(relpath)
# 获取文件名或者目录所在的路径
# 如果是文件名,则返回路径中去掉文件名的部分
dir_path = os.path.dirname('fileOperation.py')
# print(dir_path)
# 如果你传入的是一个文件夹的名字,那么会返回这个文件夹的绝对路径去掉文件名的部分
dir_path = os.path.dirname('test')
# print(dir_path)
# 获取路径中的基础名(basename)
# 比如'/Users/nzh/PythonCode/import-practise/fileOperation.py'
# 中,我想获取'fileOperation.py'这个文件名
file_path = '/Users/nzh/PythonCode/import-practise/fileOperation.py'
# print(os.path.basename(file_path))
# 还可以从上述路径中,把目录部分和文件名部分拆分开
# 需要使用os.path.split(path)
# 调用结果是,返回一个tuple,第一个元素代表目录部分,第二元素代表文件名
res = os.path.split(file_path)
print(res)
# 其实就是把os.path.dirname(file_path)和os.path.basename(file_path)组合成了一个元祖
file_tuple = (os.path.dirname(file_path), os.path.basename(file_path))
print(file_tuple)
# 把路径中的每个部分放入列表
# os.path.sep代表操作系统的路径分隔符
# windows是'\'
# Mac OSX和Linux是'/'
# 所以返回的结果是不一样的,但是为了保证程序的跨平台性
# 就可以使用os.path.sep,它会根据你所使用的操作系统自动转换为对应的分隔符
# 不同操作系统,其实返回的结果只有第一位不同
# windows返回的是盘符,比如'C:'
# Mac OSX和Linux返回的是''
# 为什么会是''呢?
# 因为字符串的split函数会以传入的参数作为分隔符
# 而file_path又是以'/'开头的,左边是没有字符的,所以会被加上一个''
path_list = file_path.split(os.path.sep)
print(path_list)
实际工作中还会用到其他函数,比如获取文件大小,或者给定路径的文件是否存在等等。。。
"""
created by nzh
Date: 2018/12/2 11:53 PM
"""
import os
# 查看文件的字节数
# 先指定一个我们要查看的文件的路径
file_path = '/Users/nzh/PythonCode/import-practise/fileOperation.py'
file_size = os.path.getsize(file_path)
# print(file_size)
# 如果想知道一个目录下的所有文件的字节数,分为两步
# 第一步,列出改目录下所有文件。os.listdir()函数获取该目录下所有文件名,返回一个list
# 第二步,遍历list中的文件名,调用os.path.getsize()函数来获取字节数。
# 比如我就像知道'fileOperation.py'文件所在目录的所有文件大小
dir_path = os.path.dirname(file_path)
dir_list = os.listdir(dir_path)
# print(dir_list)
for i in dir_list:
# print(os.path.getsize(os.path.join(dir_path, i)))
pass
# ps:如果不清楚os.path.join()和os.path.dirname()函数,请看我的上一篇"python中操作路径"
# 那么我想知道一个目录使用了多少内存就好办了
# 把遍历算出来的字节数加到一起就OK了
# 检查路径是否有效
# 判断指定路径的文件或者文件夹是否存在
# 存在则返回True,否则返回False。
is_exist = os.path.exists(file_path)
# print(is_exist)
# 判断指定的路径是否是一个文件
is_file = os.path.isfile(file_path)
# print(is_file)
# 判断指定的路径是否是一个文件夹
is_dir = os.path.isdir(file_path)
# print(is_dir)
网友评论