比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 [1]: path = '/Desktop/data_anaysis/img/folder'
In [2]: os.path.split(path)
Out [2]: ('/Desktop/data_anaysis/img', 'folder')


pathlib 
in [4]: pathlib.Path(path).parts
Out [4]: ('/', 'Desktop', 'data_anaysis', 'img', 'folder')

 

获取根目录

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比较好。。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值