栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

比os更好用的文件夹处理包 Pathlib

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

比os更好用的文件夹处理包 Pathlib

pathlib 是python3.4中新加入的文件夹处理包, 本文主要对比os与pathlib的用法 获取当前路径:
In [1]: import os

In [2]: from pathlib import Path

OS
In [3]: os.getcwd()
Out[3]: '/home/###/Desktop/data_anaysis/img/folder'

Pathlib
In [4]: Path.cwd()
Out[4]: PosixPath('/home/###/Desktop/data_anaysis/img/folder')
路径连接
OS 
In [6]: os.path.join('subfolder', 'sample.txt')
Out[6]: 'subfolder/sample.txt'

Pathlib
In [8]: Path('subfolder') / 'sample.txt'
Out[8]: PosixPath('subfolder/sample.txt')
或者
In [9]: Path().joinpath('subfolder', 'sample.txt')
Out[9]: PosixPath('subfolder/sample.txt')
获取根目录
os
In [10]: os.path.expanduser("~")
Out[10]: '/home/###'

pathlib
In [11]: Path.home()
Out[11]: PosixPath('/home/###')
获取绝对路径
OS
In [12]: os.path.abspath('example.png')
Out[12]: '/home/###/Desktop/data_anaysis/img/folder/example.png'

Pathlib
In [13]: Path('example.png').resolve()
Out[13]: PosixPath('/home/###/Desktop/data_anaysis/img/folder/example.png')
or
In [14]: Path('example.png').absolute()
Out[14]: PosixPath('/home/###/Desktop/data_anaysis/img/folder/example.png')
获取文件名
In [15]: os_path = os.path.join('subfolder', 'example1.png')

In [16]: pathlib_path = Path('subfolder') / 'example1.png'


OS
In [17]: os.path.basename(os_path)
Out[17]: 'example1.png'

Pathlib
In [18]: pathlib_path.name
Out[18]: 'example1.png'
获取文件所在文件夹名
OS
In [19]: os.path.dirname(os_path)
Out[19]: 'subfolder'

Pathlib
In [20]: pathlib_path.parent
Out[20]: PosixPath('subfolder')
获取文件名后缀
OS
In [22]: os.path.splitext(os_path)[1]
Out[22]: '.png'

Pathlib
In [23]: pathlib_path.suffix
Out[23]: '.png'
获取文件名前缀
OS
In [24]: os.path.splitext(os_path)[0]
Out[24]: 'subfolder/example1'

Pathlib
In [25]: pathlib_path.stem
Out[25]: 'example1'
创建文件夹
OS 
In [26]: os.mkdir('folder1')
In [27]: os.makedirs('./folder1/folder1', exist_ok=True)

Pathlib 
In [29]: Path('./folder2').mkdir(exist_ok=True)
In [30]: Path('./folder3/folder').mkdir(parents=True, exist_ok=True)
遍历文件夹
OS
In [56]: filepath_list = []

In [57]: for root, dir_, files_ in os.walk("./subfolder"):
    ...:     for file in files_:
    ...:         if file.endswith('.png'):
    ...:             file_path = os.path.join(root, file)
    ...:             filepath_list.append(file_path)

In [58]: filepath_list
Out[58]: 
['./subfolder/example1.png',
 './subfolder/flow_prediction_part2.png',
 './subfolder/validation_timeserie_examples.png',
 './subfolder/folder/sound_to_spectrogram.png',
 './subfolder/folder/loss_training.png',
 './subfolder/folder/validation_spec_examples.png',
 './subfolder/folder/Unet_noisyvoice_to_noisemodel.png',
 './subfolder/folder/structure_folder.png']


Pathlib
In [59]: file_list = Path('./subfolder').glob('**/*.png')  
#这里用.glob('*.png')的话,不会检索子文件夹下的图片

In [60]: list(file_list)
[PosixPath('subfolder/example1.png'),
 PosixPath('subfolder/flow_prediction_part2.png'),
 PosixPath('subfolder/validation_timeserie_examples.png'),
 PosixPath('subfolder/folder/sound_to_spectrogram.png'),
 PosixPath('subfolder/folder/loss_training.png'),
 PosixPath('subfolder/folder/validation_spec_examples.png'),
 PosixPath('subfolder/folder/Unet_noisyvoice_to_noisemodel.png'),
 PosixPath('subfolder/folder/structure_folder.png')]
或者:
In [63]: file_list2 = Path('./subfolder').rglob('*.png')

In [64]: list(file_list2)
Out[64]: 
[PosixPath('subfolder/example1.png'),
 PosixPath('subfolder/flow_prediction_part2.png'),
 PosixPath('subfolder/validation_timeserie_examples.png'),
 PosixPath('subfolder/folder/sound_to_spectrogram.png'),
 PosixPath('subfolder/folder/loss_training.png'),
 PosixPath('subfolder/folder/validation_spec_examples.png'),
 PosixPath('subfolder/folder/Unet_noisyvoice_to_noisemodel.png'),
 PosixPath('subfolder/folder/structure_folder.png')]
确认是否是文件夹
OS
In [65]: os.path.isdir(os_path)
Out[65]: False

In [66]: os.path.isdir(os.path.join('subfolder'))
Out[66]: True

Pathlib
In [67]: pathlib_path.is_dir()
Out[67]: False

In [68]: pathlib_path.parent.is_dir()
Out[68]: True

文件夹移动

文件夹移动还是用shutil吧

总结

总体来看 Pathlib比os好用的多, 尤其是在遍历文件夹, 找文件夹下相应后缀文件的时候, 所以能用pathlib还是用pathlib比较好。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号