メモ的な何か

NWエンジニアって名乗りずらい人

Pythonで対象フォルダ内のファイル名を取得する

よく仕事でフォルダ内にあるファイル名を一個づつコピーして
メールで送るっていう謎作業がありまして
これPythonで全部取得できないかな?と思いやってみました。

対象のフォルダ内のファイル一覧取得の方法となります。
ついでに一覧をメモ帳に書き込んで保存までします。

全体コード

import glob2
import os

#ファイル名が欲しいフォルダを入力
files=input('フォルダパス:')

#glob関数でファイル名一覧取得
files_names=files+'/*'

files_names_l =glob2.glob(files_names)

#ファイル名だけに変形する

file_l=[]

for file in files_names_l:
	file_l.append(os.path.basename(file))

#改行して見やすくする
file_l_n="\n".join(file_l)

#ついでにテキストファイルに作成

export_text = files+"/test.txt"
with open(export_text, mode='w') as f:
	f.write(file_l_n)

解説

使用モジュール

モジュールはこの二つだけです。
osはデフォルトで入ってたはずですので、
pip install glob2 でインストールして使いましょう。

input関数でファイル名のフォルダを指定

#ファイル名が欲しいフォルダを入力
files=input('フォルダパス:')

表示としてはこんな感じ

フォルダパス:C:\pyworks←私が入力したパスになります。

取得するファイル名を指定

input関数で指定したパス内のファイル名を取得していきます。

#取得するファイル名を指定
files_names=files+'/*'

'/*'の部分の*でパス内のすべてファイル名を取得してきます。
ここを↓のように記述すると

#指定したパス内のテキストファイル名だけ取得
files_names=files+'/<strong>*.txt</strong>'
#指定したパス内のpdfファイル名だけ取得
files_names=files+'/<strong>*.pdf'</strong>

正規表現ってやつらしいです。

glob関数でファイル名一覧取得

ここでglob関数使っていきます。
ちなみにglob2とglobっていうモジュールありますが
何が変わったのか謎です。
超サイヤ人2のほうが超サイヤ人より強いから理論でglob2使ってます。

files_names_l =glob2.glob(files_names)

ここで取得した一覧だとこんなリストになってます。
["C:\Downloads\test.py","C:\Downloads\test1.py","C:\Downloads\test2.py"]

いや~見にくいんで、次でこれを分けていきます。

os.path.basenameでパスとファイル名部分をわける

file_l=[]

for file in files_names_l:
	file_l.append(os.path.basename(file))

os.path.basenameを使うことでパスとファイル名を分けることができます。

join関数で改行する

#改行して見やすくする
file_l_n="\n".join(file_l)

この時点で試しにprintしてみると下のようになるはずです。

test.py
test1.py
test2.py

せっかく出力したんでテキストファイルにしていきましょう。

export_text = files+"/test.txt"
with open(export_text, mode='w') as f:
	f.write(file_l_n)

保存先は最初に指定したパスにしています。
以上となります。
ありがとうございました。