質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1130閲覧

ファイル名のみの一覧を取得する際のプログラミングについて

star999

総合スコア4

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/28 11:50

編集2021/04/28 12:00

初心者です。
pythonで、ファイル名のみの一覧を取得する際のプログラミングについて教えてください。
ネットで調べたところ、以下のようなコードを利用できるかと思いました。

ファイル構造の中身は、以下のような感じです。
.
└── testdir
├── dir1
├── dir2
├── file1
├── file2.txt
└── file3.jpg

import os
path = "./testdir"
files = os.listdir(path)
files_file = [f for f in files if os.path.isfile(os.path.join(path, f))]
print(files_file)

[f for f in files if os.path.isfile(os.path.join(path, f))]の処理手順がわかっていません。

forの前に、fが入るケースがそもそもわからず、どのようなプログラムになっているのかわからないので

かみ砕いてご教授いただけますでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/04/28 11:57

質問のタイトルと質問内容がずれていると思います。質問タイトルの「ファイル名のみの一覧、取得」については解決済なのでしょうか?
star999

2021/04/28 12:03

失礼いたしました。 タイトル名を変更しました。実行はうまくできたのですが、以下のロジックが理解できていません。 [f for f in files if os.path.isfile(os.path.join(path, f))] よろしくお願いいたします。
guest

回答2

0

ベストアンサー

これは、「リスト内包表記」というものです。

以下のようなプログラムと同値といえます。

py

1files_file = [] 2for f in files: 3 if os.path.isfile(os.path.join(path, f)): 4 files_file.append(f)

リストの内容を短く記述できます。また、速度が若干早いという利点もあります。

f について

py

1[f for f in files]

この場合、 files から一つずつ要素を取り出して、そのまま新しいリストの要素とします。

py

1[str(f) for f in files]

この場合は files から取り出した要素を str() に渡して、結果をリストの要素とします。
ゆえにリストは、フォルダ名やファイル名の文字列を含みます。

つまり、 forより前に書かれている f はリストの要素を示しています。

なお、リストに入れる要素を示しているだけなので、 f を使わなくてもエラーにはなりません:

py

1[1 for f in files]

この場合は [1, 1, 1, ...] というリストになりますね

if 以下について

もし条件式を評価して、 True ならその要素を新しいリストの要素とし、 False なら無視するという動きをします。

py

1os.path.isfile(os.path.join(path, f))

os.path.isfile は与えられたパスがファイルであれば、True を返します。なので、

py

1[f for f in files if os.path.isfile(os.path.join(path, f))]

は、files の要素を f として、もしそのパスがファイルであれば、 f を新しいリストの要素にする、という動きをします。

投稿2021/04/28 12:09

coolwind0202

総合スコア708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

内包表記です。

Pythonリスト内包表記の使い方をお読みください。

公式ドキュメントでは5.1.3. リストの内包表記に書いてあります。

投稿2021/04/28 12:04

編集2021/04/28 12:06
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問