超初心者向けPython入門講座

仕事の効率化などにpythonを使いたい!けど何から始めらばよいか分からない、といった初心者の方向けに、pythonの導入から実用的な使い方まで、極力分かりやすくまとめたサイトです。

python

Pythonでフォルダ内のファイル名を取得しよう(拡張子指定)

投稿日:2020-08-29 更新日:

今回は、特定のフォルダに入っているすべてのファイル名を取得したり、特定の拡張子のファイル名を取得する方法について解説します。

ファイル名を取得することで、フォルダ内のファイルを対象にループ処理などを行うことができますので、何かと便利です。

意外とよく使う技術なので、皆さんもぜひマスターしてください。

解説内容

 

1. 現在のフォルダ内のファイル名を取得

まずは、現在のフォルダ内の全ファイル名を取得してみましょう。

基本的に、複数のファイル名を取得するには「glob」というライブラリを使用し、使い方は「glob.glob(ファイル指定)」という形です。

 

では、実際にコードを確認してみましょう。

まずは下のコードを保存し、その場所に適当にファイルを置いて実行してください。(私は下の画像のような環境で起動してみます)

import glob
files = glob.glob("*")
print(files)

これを実行すると、
[‘get_files.py’, ‘test1.txt’, ‘test2.txt’, ‘test3.txt’, ‘テスト1.txt’, ‘テスト2.txt’, ‘テスト3.txt’]
ファイル名がリスト形式で出力されます

 

ポイントは、「glob.glob(“*”)」の部分で、ファイルの指定に使われている「*」をワイルドカードと呼びます

ワイルドカードとは、すべてのものが当てはまる」という意味になります。

ですので、今回のケースではフォルダ内のすべてのファイル名が当てはまり、すべて書き出される結果になっています。

 

また、ワイルドカードは名前の一部にも使うことができます。

それを用いて、今度は拡張子が「txt」のテキストファイルのみを取得してみます。下のコードを実行してください。

import glob
files = glob.glob("*.txt")
print(files)

すると、今回は[‘test1.txt’, ‘test2.txt’, ‘test3.txt’, ‘テスト1.txt’, ‘テスト2.txt’, ‘テスト3.txt’]と、テキストファイルのみ取得することができました。

「*.txt」とすることで、「*」の部分はなんでもよく、拡張子が「txt」となっているものだけ適応されるため、このようにテキストファイルのみ取得することができます。

 

ちなみに、ワイルドカードは名前の間に挟むこともできるため、下のようにすることで平仮名の名前のファイルのみ取得する、なんてこともできます。

import glob
files = glob.glob("テスト*.txt")
print(files)

以上が、ファイル名取得の基本となります。

Point
  • 複数のファイル名を取得するには「glob」というライブラリを使用
  • 使い方は「glob.glob(ファイル指定)」
  • ワイルドカードを使い、任意のファイル名を指定

 

 

2. 異なる階層のフォルダ内のファイル名を取得

次に、階層の異なるフォルダ内のファイル名を取得したいと思います。

階層を移動するには、Windowsの場合「\\(バックスラッシュ)」を用います。(本当は「\」一つで良いのですが、エスケープ文字の関係により2つ重ねます。)

※UNIXやMacの方は「/(スラッシュ)」を使用しましょう。

 

例えば、現在のフォルダから、「testf」というフォルダに移動したい場合は、「.\\testf」という風に書きます。

※ちなみに、現在階層の「.\\」は省略可能です。

 

また、「..」では一つ上の階層を表します。

簡単にまとめると、下のような形です。

表記意味例(下の画像参照)
.現在の階層.\\test3 (test3を指定)
..一つ上の階層..\\test1 (test1を指定)
.\\フォルダ名フォルダの階層.\\testf\\test5 (test5を指定)

 

 

ではこれらを踏まえて、異なる階層のファイル名を取得してみましょう!

今回は、「testf」というフォルダの中に先ほどのファイルを保存して取得してみます。以下を実行してみてください。

(下のように、プログラムのある階層に「testf」のフォルダを設置)

import glob
files = glob.glob("testf\\*.txt")
print(files)

これで、「testf」内のファイル名を取得できました。
出力結果
[‘testf\\test1.txt’, ‘testf\\test2.txt’, ‘testf\\test3.txt’, ‘testf\\テスト1.txt’, ‘testf\\テスト2.txt’, ‘testf\\テスト3.txt’]

 

取得したファイル名には、「testf\\」というファイルパスがついていますが、ループ処理を行う場合、このファイルパスがついている方が都合が良いです。

どうしてもファイル名のみ取得したい方は、下のようにループ処理で除外しましょう。

files2 = []
for file in files:
    fnam = file.split("\\")
    files2.append(fnam[1])
print(files2)

これで、異なるフォルダ内のファイル名についても取得することができました。

Point
  • 階層を移動するには「\\」を用いる
  • 「.」が現在の階層を表す
  • 「..」が一つ上の階層を表す
  • 「ファイル名」でファイルの階層を表す

 

 

3. 複数のフォルダ内のファイル名を取得

次に、複数のフォルダ内にあるファイルの名前の取得方法について解説します。

今回も「*(ワイルドカード)」が活躍します!

実はワイルドカードはファイル名だけでなく、フォルダ名にも使えます。

 

では、実際にワイルドカードを用いて複数のフォルダを指定してみましょう。

(下のように、「testf1」と「testf2」をプログラムのある場所に作成し、その中に先ほどのテキストファイルを配置しています。)

import glob
files = glob.glob("testf*\\*.txt")
print(files)

これで、2つのフォルダにまたがったファイル名も下のように取得するすることができました。
出力結果
[‘testf1\\test1.txt’, ‘testf1\\test2.txt’, ‘testf1\\test3.txt’, ‘testf2\\テスト1.txt’, ‘testf2\\テスト2.txt’, ‘testf2\\テスト3.txt’]

 

これで、どの場所にあるファイルでも名前を取得することができるようになりました。

Point
  • ワイルドカードは、ファイル名だけでなくフォルダ名にも使用可能
  • 「*\\*.txt」のようにすることで複数のフォルダを指定

 

 

4. 取得したファイル名を使ってループ処理を実行

最後に、取得したファイル名を使ったループ処理について少し触れておきたいと思います。

今回は、ループ処理を用いてすべてのファイルにファイル名を記入してみようと思います。

import glob
files = glob.glob("*\\*.txt")
for file in files:
    with open(file, "w") as f:
        f.write("このファイルは「"+ file + "」です。")

上のようにすることで、すべてのファイルにファイル名を記入することができました。

(例として、テスト1.txtの中は下のようになっています。)

 

このように、取得したファイル名を用いてループ処理を行うことで、複数のファイルに同様の処理を行うことができます。

今回はファイルに書き込みを行いましたが、実際よく使うのは「データの読み込み」です。

リストを用いたループ文に疑問がある方は、下の記事で解説していますのでそちらもご覧ください。

Point
  • 取得したファイル名を用いてループ処理を行うことで、複数のファイルに同様の処理を行うことができる。
  • 複数データの読み込み時に非常に便利

 

 

5. おわりに

今回は、複数ファイルの名前を取得する方法について解説しました。

データの読み込みなどを行う際は、今回の方法を使えるととても便利なので、ぜひ皆さんも使えるようになってください。

 

なお、このサイトでは初心者の方向けに「Python初心者入門講座」という講座を作っていますので、気になった方はそちらもご覧いただけると幸いです。

スポンサーリンク




スポンサーリンク




-python
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

第12章 Pythonでcsvファイルを読み込んでみよう

さて、前回は「テキストファイル」の読み込みについて解説しましたね。この章では、「csvファイル」の読み込みについて解説したいと思います。 解説内容 csvファイルって何? csvファイルを読み込んでみ …

matplotlibの使い方(figure・axesや複数グラフの配置・サイズについて)

matplotlibでグラフを作成する方法には、大きく分けて2つの種類があります。 しかし、ネット上ではこの2種類のコードが混在しているため、使い分けについて意識しておかないと混乱することがあります。 …

2次元平面分布図における範囲外の凡例や色合いの設定(Python)

今回は、Pythonで平面分布図を作成する際の色合いや、凡例の設定、また凡例の範囲外の色の設定について解説したいと思います。 解説内容 平面分布図の色合いの設定 平面分布図の凡例の設定 平面分布図にお …

Pythonでcsvファイルへの書き出し(list,numpy,pandas対応)

今回は、「csvファイル」へのデータの書き出しについて解説していこうと思います。csvファイルとは何か?については、本サイトの「Pythonでcsvファイルを読み込んでみよう」で解説しているので、そち …

第15章 Pythonでグラフを作成してみよう(matplotlib)

この章では、いよいよPythonを使ったグラフの作成について解説したいと思います。 解説内容 matplotlibの使い方を学ぼう 簡単なグラフを作成してみよう グラフにタイトルや軸ラベルを表示させよ …

スポンサーリンク





初めまして、サイトを運営しているキユと申します。

このサイトでは、まったくの初心者がPythonを使って、単純作業や仕事を効率化できるようになるまでに必要なことをまとめています。