背景・前提・仕様とか
仕事用でExcelファイルを扱うツールを作るときの備忘テンプレ。
意図した動作の前提として、下記の状態と想定しています。
-
デスクトップ上に任意の名前(下記コード中のfolder_name)でフォルダを作り、その中に扱いたいxlsxをすべて放り込んだ状態で動かす。
-
フォルダ内の全xlsxのファイル名リストを、自然順のリストで取得
-
ファイル名リストをfor文で順繰り取得して、各ファイルの絶対パスを構築するところまで。
自然順とは
「ファイル名+番号」みたいなリストを、人間から見ていい感じに整列させたときの順序。
例えば、
["n5", "n1", "n10"]
というリストを普通にソートすると、
["n1", "n10", "n5"]
となるけど、自然順だと、
["n1", "n5", "n10"]
になる。
※参考にさせていただいたページ
[python] os.listdir()の出力を数字順にsortして、それらを順番にpd.read_csvで読み込みたい|teratail
実行環境
実行環境と各ライブラリのバージョンは下記の通り。
- Windows10 pro
- Python 3.7.3
- natsort 7.0.1
フォルダ内のすべてのxlsxファイルの名称を自然順のリストで取得して、絶対パスを構築する。
for_all_xlsx.py
import os
from natsort import natsorted
# デスクトップに作った任意のフォルダ名称
folder_name = "******"
# 定数
desktop_path = os.getenv("HOMEDRIVE") + os.getenv("HOMEPATH") + "\\Desktop"
folder_path = os.path.join(desktop_path, folder_name)
# Excelファイル名リストを自然順で取得
files = natsorted(os.listdir(folder_path))
#ファイル名リストをfor文でまわして各ファイルの絶対パスを構築
for filename in files:
filepath = os.path.join(folder_path, filename)
'''以下、処理したい内容を記述'''