【python】複数ファイル処理選択、ファイル名、フォルダパス取得

Python

ad2

【python】複数ファイル処理選択、ファイル名、フォルダパス取得

複数ファイルを選択し処理する

仕事の効率化を行う上でよくする処理として、複数ファイルを選択して1ファイルずつ処理をするということがよくある。

今回は、単一ファイル選択時の処理、複数ファイル選択時の処理を行う処理を関数にしてみたので、参考でどんどん真似して効率化に活用してくれると幸いです。

ソースコード

import os
import tkinter  # tkinterをインポート
from tkinter import filedialog  # tkinterのfiledialogをインポート


# 単一ファイル選択
def file_select():
    root = tkinter.Tk()  # tkinterのインスタンスを生成
    root.withdraw()

    # ファイル選択ダイアログでのファイル検索種類を指定
    file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;'),
                 ('wordファイル', '*.doc;*.docx;*.docm;'),
                 ('textファイル', '*.txt')]
    # file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;')]  # 例
    # file_type = [('DXF(図面ファイル)', '*.dxf')]  # 例

    # initialdir:ダイアログが開くディレクトリを指定
    # filename = tkFileDialog.askopenfilename(filetypes=file_type, initialdir='C:/foldername')  # 単一ファイル選択時
    filename = filedialog.askopenfilenames(filetypes=file_type)

    return filename  # 選択ファイルの絶対パスを返します。


# 複数ファイル選択
def files_select():
    root = tkinter.Tk()  # インスタンス生成
    root.withdraw()

    # ファイル選択ダイアログでのファイル検索種類を指定
    file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;'),
                 ('wordファイル', '*.doc;*.docx;*.docm;'),
                 ('textファイル', '*.txt')]
    # file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;')]  # 例
    # file_type = [('DXF(図面ファイル)', '*.dxf')]  # 例

    # initialdir:ダイアログが開くディレクトリを指定
    # filename = tkFileDialog.askopenfilename(filetypes=file_type, initialdir='C:/foldername')  # 単一ファイル選択時
    filenames = filedialog.askopenfilenames(filetypes=file_type)

    return filenames  # 選択ファイルの絶対パスを返します。


# メイン処理関数
def hoge_logic(_path, _base_name, _dir_name):
    # 処理内容~~
    # ~~~~~~~~~
    # ~~~~~~~~~

    print('ファイルPath: ' + _path)
    print('フォルダ名dir_name: ' + _dir_name)
    print('ファイル名base_name: ' + _base_name)


# main
if __name__ == "__main__":
    # 単一ファイル選択処理の場合------
    # filename = file_select()
    # base_name = os.path.splitext(os.path.basename(filename))[0]  # ファイル名を取得
    # dir_name = os.path.dirname(filename)  # フォルダ名を取得
    #
    # # メイン処理関数呼び出し
    # hoge_logic(filename, base_name, dir_name)
    # -------------------

    # 複数ファイル選択処理の場合------
    filenames = files_select()
    # 複数ファイルを1ファイルずつ処理する
    for path in list(filenames):
        base_name = os.path.splitext(os.path.basename(path))[0]  # ファイル名を取得
        dir_name = os.path.dirname(path)  # フォルダ名を取得

        # メイン処理関数呼び出し
        hoge_logic(path, base_name, dir_name)
    # ----------------------

    print('処理終了')

処理内容

このpythonファイルを実行すると、最初にファイル選択ダイアログ画面が表示されるので、

処理対象のファイルを選択します。

py_files_floder

コンソール画面に選択されたファイル数分の下記の情報を取得するフローとなります。

・ファイル絶対パス

・フォルダ名

・ファイル名

# 出力結果
ファイルPath: C:/sample/test1.xlsx
フォルダ名dir_name: C:/sample
ファイル名base_name: test1
ファイルPath: C:/sample/test2.xlsx
フォルダ名dir_name: C:/sample
ファイル名base_name: test2
ファイルPath: C:/sample/test3.xlsx
フォルダ名dir_name: C:/sample
ファイル名base_name: test3
ファイルPath: C:/sample/test4.xlsx
フォルダ名dir_name: C:/sample
ファイル名base_name: test4
ファイルPath: C:/sample/test5.xlsx
フォルダ名dir_name: C:/sample
ファイル名base_name: test5
処理終了

あとは、ファイル毎に処理をする内容に書き換えてあげれば、活用できると思います。

おまけ

ファイル種類をプルダウンから選択できる。

サンプルコード

# ファイル選択ダイアログでのファイル検索種類を指定
    file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;'),
                 ('wordファイル', '*.doc;*.docx;*.docm;'),
                 ('textファイル', '*.txt')]

下の画像のようにプルダウン選択できる。

py_files_floder002