【Python】Python ~ 基本編 / パス情報抽出 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/09/02/000000

の続き。

 「パスからファイル名を抜き出す」とか
「ファイル名から拡張子を抜き出す」とかを結構やることが多く
なんだっけ?っていつもなるので、まとめておく

目次

【1】パス、ファイル名、拡張子を抽出
【2】ファイル名 or フォルダ名 のみ抽出
【3】パスのみ抽出
【4】直近の親フォルダ名を取得する

【1】パス、ファイル名、拡張子を抽出

import os

file_name = 'input.csv'
# ('', 'input.csv')
print(os.path.split(file_name))
# ('input', '.csv')
print(os.path.splitext(file_name))

path = 'C:/tmp/input.csv'
# ('C:/tmp', 'input.csv')
print(os.path.split(path))
# ('C:/tmp/input', '.csv')
print(os.path.splitext(path))

s3_path = 's3://your-bucket/xxx/sample.txt'
# ('s3://your-bucket/xxx', 'sample.txt') 
print(os.path.split(s3_path))
# ('s3://your-bucket/xxx/sample', '.txt')
print(os.path.splitext(s3_path))

path, file_extention = os.path.splitext(s3_path)
# True
print(file_extention in ['.txt', '.csv'])
# False
print(file_extention in ['.sql', '.hql'])
# False
print(file_extention not in ['.txt', '.csv'])
# True
print(file_extention not in ['.sql', '.hql'])

【2】ファイル名 or フォルダ名 のみ抽出

# input.csv
print(os.path.basename(path))

【3】パスのみ抽出

# C:/tmp
print(os.path.dirname(path))

【4】直近の親フォルダ名を取得する

# tmp
print(os.path.basename(os.path.dirname(path)))

https://note.nkmk.me/python-os-basename-dirname-split-splitext/

サンプル

import os

# ファイル名(拡張子なし)
def get_filename_without_ext(target_path):
  file_name = os.path.basename(target_path)
  return os.path.splitext(file_name)[0]

# 親フォルダ名
def get_parent_dir_name(target_path):
  return os.path.basename(os.path.dirname(target_path))

# ('/abc/def', 'hello.txt')
print(os.path.split('/abc/def/hello.txt'))

# ('/abc/def/hello', '.txt')
print(os.path.splitext('/abc/def/hello.txt'))

# hello.txt
print(os.path.basename('/abc/def/hello.txt'))

# hello
print(get_filename_without_ext('/abc/def/hello.txt'))

# /abc/def
print(os.path.dirname('/abc/def/hello.txt'))

# def
print(get_parent_dir_name('/abc/def/hello.txt'))

関連記事

Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / フォルダ・ファイル操作 ~
https://dk521123.hatenablog.com/entry/2019/09/02/000000