Python ファイルパスからフォルダパス,フォルダ名,ファイル名,拡張子,拡張子なしファイル名を取得する「pathlib」

'21/12/11更新:新しいファイルパスをリストから作成する方法に変更した。またzip圧縮するコードも追記。
 本記事では、下図のようにファイルパスからフォルダパス,フォルダ名,ファイル名,拡張子,拡張子なしファイル名を取得する等の雛形コードを載せました。さらに、ファイル名にサブフォルダ名(の番号)を追記して新しいファイル名を作成して、カレントディレクトリへコピーするコードも載せています。

f:id:HK29:20211118230430p:plain

■本プログラム

import pathlib
import os
import shutil

# 指定ディレクトリ以下のサブディレクトリ含めた対象のファイルパスをリストで取得
#get_file_list = list(pathlib.Path(r'./data_folder').glob('**/*.txt')) 
get_file_list = list(pathlib.Path(r'./data_folder').glob('**/data.txt')) 
save_dir_name = 'new_dir'
for file_path in get_file_list:
    print('file_path -> ', file_path)

    # ディレクトリのパスを取得
    dir_path = file_path.parent
    print('dir_path -> ', dir_path)
    
    # 末尾のディレクトリ名を取得
    dir_name = dir_path.name
    print('dir_name -> ', dir_name)
    
    # ディレクトリ名の'_'より右側を取得
    dir_name2 = dir_name[dir_name.rfind('_') + 1:]
    print('dir_name2 -> ', dir_name2)
    
    # 2桁だけ取得
    dir_name3 = dir_name2[1:]
    print('dir_name3 -> ', dir_name3)
    
    # 拡張子付きファイル名を取得
    file_name = file_path.name
    print('file_name -> ', file_name)
    
    # 拡張子を取得
    file_name2 = file_path.suffix#.lstrip('.')
    print('file_name2 -> ', file_name2)
    
    # 拡張子なしファイル名を取得
    file_name3 = file_name.replace(file_name2, '')
    print('file_name3 -> ', file_name3)
    
    # ディレクトリ名をファイル名に追記して新たなファイル名を作成
    new_file_name = file_name3 + '_' + dir_name3 + file_name2
    print('new_file_name -> ', new_file_name)
    
    # file_pathのファイルを指定ディレクトリへファイル名を変更してコピー
    my_path = os.getcwd() # ここではカレントディレクトリを指定
    my_path_list = [my_path, save_dir_name, new_file_name]
    new_file_path = os.path.join(*my_path_list) # パスを作成する
    print('new_file_path -> ', new_file_path)
    shutil.copy2(file_path, new_file_path)
    
    print() # プリント関数の実行による表示上の改行

shutil.make_archive(save_dir_name, 'zip', root_dir = save_dir_name)

以上

<広告>