A folder processing package Pathlib that is better than os

pathlib is a new folder processing package added in python3.4. This article mainly compares the usage of os and pathlib

Get the current path:

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')

path connection

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')

path splitting

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')

 

Get the root directory

os
In [10]: os.path.expanduser("~")
Out[10]: '/home/###'

pathlib
In [11]: Path.home()
Out[11]: PosixPath('/home/###')

get absolute path

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')

get filename

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'

Get the name of the folder where the file is located

OS
In [19]: os.path.dirname(os_path)
Out[19]: 'subfolder'

Pathlib
In [20]: pathlib_path.parent
Out[20]: PosixPath('subfolder')

Get the filename suffix

OS
In [22]: os.path.splitext(os_path)[1]
Out[22]: '.png'

Pathlib
In [23]: pathlib_path.suffix
Out[23]: '.png'

Get the filename prefix

OS
In [24]: os.path.splitext(os_path)[0]
Out[24]: 'subfolder/example1'

Pathlib
In [25]: pathlib_path.stem
Out[25]: 'example1'

create folder

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)

traverse folders

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')]

Confirm whether it is a folder

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

folder move

Use shutil to move folders

Summarize

Generally speaking, Pathlib is much easier to use than os, especially when traversing folders and looking for files with corresponding suffixes under folders, so it is better to use pathlib or pathlib. .

Guess you like

Origin blog.csdn.net/bo17244504/article/details/124711489