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. .