よく仕事でフォルダ内にあるファイル名を一個づつコピーして
メールで送るっていう謎作業がありまして
これ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)
保存先は最初に指定したパスにしています。
以上となります。
ありがとうございました。