zoukankan      html  css  js  c++  java
  • 路径操作OS模块和Path类(全)一篇够用!

    路径操作

    路径操作模块

    os模块

    os属性

    os.name  # windows是nt, linux是posix
    os.uname()  # *nix支持
    sys.platform  #sys模块的属性, windows显示win32, linux显示linux
    

    os方法

    	os.listdir('o:/tmp') # 返回指定目录内容列表,不递归
    	os.stat(path, *, dir_fd=None, follow_symlinks=True)
    	os.lstat()  # 如果是软连接可以使用这个方法
    	os.stat_result()
    	os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True) # 改变文件属主属组但要有足够权限
    

    os.path属性

    	path.altsep  # windows下的备选路径分隔符/;Linux下没有备选路径分隔符,只能用/,返回None
    	path.curdir  # 返回一个 . 是当前路径,字符串
    

    os.path方法

    	p = path.join('etc', 'sysconfig', 'network-scrips', 'ifcfg-ens33') # 拼接,返回一个字符串
    	path.exists(p) # 存在,返回bool值
    	path.split(p) # 切割,返回一个元组,元组中有两个元素,第一个是dirname,第二个是basename
    	path.dirname(p) # 返回p的dirname,字符串格式
    	path.basename(p) # 返回p的basename,字符串格式
    	path.abspath(p) # 无论p是否存在,都能返回p的绝对路径
    	path.abspath('') == path.abspath('.') # 两个都是返回当前路径的绝对路径,path.abspath()报错
    	path.splitdrive(p) 
    	# 切割出一个元组,第一部分是盘符,第二部分从根开始,没有盘符,第一部分是空串
    	path.splitext(p) # 切割出一个元组,第二部分是最后一个suffix,如果没有suffix,第二部分是空串
    	path.commonpath(容器) # 容器(可以是列表元组集合)中有至少一个路径字符串,返回相同部分字符串
    	path.commonprefix(列表或元组) # 列表和元组可以为空,返回一个字符串,是相同部分,如果有最后一个suffix只会返回到最后一个suffix之前的部分
    
    	p1 = path.abspath(__file__)
    	while p1 != path.dirname(p1):
    		p1 = path.dirname(p1)
    		print(p1)
    

    pathlib模块Path类

    Path类的方法和属性

    	Path.cwd()  # 返回current work directory ; 一个Path对象
    	Path.home()  # 返回当前home路径, 是Path对象
    

    Path对象

    	p = Path('/etc', 'sysconfig', Path()) # 生成一个Path类对象
    	p = Path() == p is Path('') is p = Path('.') # 这三个返回三个点 . ,是当前路径对象
    	str(p)  # 把路径对象转换成路径字符串
    	bytes(p) # 把路径对象转换成路径字节
    

    Path对象操作符

    Path对象 / Path对象, 生成一个新的Path对象
    Path对象 / 字符串,  生成一个新的Path对象
    字符串 / Path对象,  生成一个新的Path对象
    

    Path对象属性

    	p.parent # 得到Path对象p的父目录,还是个Path对象
    	p.parents  # 得到一个惰性Path对象,但是这个惰性对象是可以索引,但不能超界,可以用驱动
    	p.name # 相当于基名,是字符串
    	p.stem # name中去掉最后一个suffix之后的部分,是字符串
    	p.suffix # 最后一个后缀,是一个字符串
    	p.suffixes # 返回一个列表,里面是所有的suffix,每一个都是字符串类型
    	name = stem + suffix
    

    Path对象方法

    	p.with_suffix('.az') # 有扩展名则替换,没扩展名则补充, 返回的还是Path对象
    	p.with_name('hello') # 替换目录最后一个部分,并返回一个新的路径对象
    	p.cwd()  # 返回current work directory ; 一个Path对象
    	p.home()  # 返回当前home路径, 是Path对象
    	p.resolve()  # windows下返回p的当前路径,是Path对象,Linux下如果是软链接则直接被解析
    	p.absolute()  # 返回绝对路径,是Path对象
    	p.mkdir(mode=0o777, parents=False, exist_ok=False)
    	# 创建目录,如果parents为False时,父目录不存在,则报出FileNotFoundError
    	# exist_ok参数是3.5版本加入,False时,路径存在,抛出FileExistsError,True时忽略
    	p.rmdir() # 删除Path对象最后一个目录,但是要求最后一个目录为空,否则报错
    	p.touch(mode=0o666, exist_ok=True) # 创建一个文件,文件名是p.name
    	p.as_uri() # 将路径返回成URL, 例如'file:///etc/passwd'
    	p.iterdir() # 将p目录下的所有内容返回成一个迭代器,需要驱动,其中每一个元素都是Path对象
    	p.glob("*.*") # **/*.py 表示递归所有目录,相当于rglob; */*.py向下一层
    	# 返回一个惰性可迭代对象,这个惰性可迭代对象中每个元素都是Path对象
    	p.rglob("*.?") # 返回一个生成器,next(p.rgolob)、list(p.rglob)
    	Path('a/b/c.py').match('*.py')  # 模式匹配True
    	p.stat() # 相当于Linux下的stat命令
    	p.lstat() # 如果是软链接不追踪,只显示软链接的信息
    	p.open(mode='r', buffering=-1, encoding=None, error=None, newline=None)
    	# 使用方法类似于open(filedir,mode='r', buffering=-1, encoding=None, error=None, newline=None)
    	p.read_bytes() # 以'rb'模式读取路径对应文件,返回二进制流
    	p.read_text(encoding=None, errors=None) # 以'rt'方式读取路径对应文件,返回文本
    	p.write_bytes(data) # 以'wb'方式写入数据到路径对应文件。
    	p.write_text(data, encoding=None, errors=None) # 以'wt'方式写入字符串到路径对应文件
    
    
    
    
    for x in p.parents[len(p.parents)-1].iterdir():
    	print(x, end='	')
    	if x.is_dir():
    		flag = False
    		for _ in x.iterdir():
    			flag = True
    			break
    		print('dir{},{}'.format(x, 'Not empty' if flag else 'empty'))
    	elif x.is_file():
    		print("{}is file".format(x))
    	else:
    		print('other')
    	
    	# 一些判断方法:
    	p.exists()  # 目录或文件是否存在
    	p.is_dir()  # 是否是目录,目录存在返回True
    	p.is_file()  # 是否是普通文件
    	p.is_symlink()  # 是否是软链接
    	p.is_socket()  # 是否是socket文件
    	p.is_block_device()  # 是否是块设备
    	p.is_char_device()  # 是否是字符设备
    	P.is_absolute()  # 是否是绝对路径
    
  • 相关阅读:
    ThreadLocal的原理和使用场景
    sleep wait yield join方法的区别
    GC如何判断对象可以被回收
    双亲委派
    ConcurrentHashMap原理,jdk7和jdk8版本
    hashCode和equals
    接口和抽象类区别
    为什么局部内部类和匿名内部类只能访问局部final变量
    【GAN】基础GAN代码解析
    TF相关codna常用命令整理
  • 原文地址:https://www.cnblogs.com/duanming/p/11830279.html
Copyright © 2011-2022 走看看