1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

大量の画像ファイルから特定の画像ファイルを抽出

Last updated at Posted at 2021-03-24

#目的

Pythonを用いて、
大量の画像が含まれたフォルダの中から使用する画像だけを一括で抽出したい。

抽出したい画像のファイル名が
ExcelファイルやCSVファイルの"filename"列に書かれているものとする。

#本記事について
この記事はPython初心者に向けて掲載しています。
これを参考にすればタイトルのようなことがすぐにできるようになっています。

#コード全体

全文
import os
import shutil
import pandas as pd

src_dir = ("抽出元のフォルダのパス") 
dst_dir = ("抽出先のフォルダのパス") 

# 表データ読み込み
df = pd.read_csv("data.csv")
# df = pd.read_excel("data.xlsx")  Excelファイルの場合

# filename列の読み込み
filenames = df["filename"]


# 各画像を個別にsrc_dirからdst_dirにコピー
for f in filenames:
    src_path = os.path.join(src_dir, f)
    dst_path = os.path.join(dst_dir, f)
    if os.path.isfile(src_path):
        shutil.copy(src_path, dst_path)

###ライブラリのimport

最初にライブラリをimportしておきましょう。
これは既に構築済みのプログラムを呼び出すことができます。
importすればコードを簡略化することができます。

pandasは表データを扱うためのライブラリです。
今回はExcelファイルやCSVファイルを読み込むのに使用しています。

shutilはファイルのコピーに使用しています。
osはファイルやフォルダの操作に向いていて、ファイルの存在確認やパスを扱う際に使用しています。

ライブラリのimport
import os
import shutil
import pandas as pd

###ファイル名の読み込み
CSVファイルはpd.read_csv('data.csv')で読み込めます。
Excelファイルはpd.read_excel('data.xlsx')で読み込めます。
かっこの中はそれぞれ利用したいファイル名に変更しましょう。

CSVファイルやExcelファイルを読み込んだ後、列名(今回はfilename)を指定して読み込みましょう。

読み込み
# 表データ読み込み
df = pd.read_csv("data.csv")
# df = pd.read_excel("data.xlsx")  Excelファイルの場合

# filename列の読み込み
filenames = df["filename"]

###抽出元、抽出先の指定

src_dirは大量の画像が含まれたフォルダのパス、
dst_dirはコピー先のフォルダのパスをそれぞれ指定しましょう。

ちなみにsrcはsourceの略、dstはdestinationの略です。

src_dir = ("抽出元のフォルダのパス") 
dst_dir = ("抽出先のフォルダのパス")

###画像のコピー

for文で各画像のコピーをしていきます。

os.path.join(src_dir, f)は抽出元のフォルダパスと各画像のファイル名を結合し、
画像ファイルのパスにしています。

dst_path = os.path.join(dst_dir, f)は抽出先のパスです。
os.path.isfile(path)はファイルの存在確認のためにしています。

if os.path.isfile(path): shutil.copy(src_path, dst_path)
src_pathdst_pathがなければコピーするというコードになっています。

画像のコピー
# 各画像を個別にsrc_dirからdst_dirにコピー
for f in filenames:
    src_path = os.path.join(src_dir, f)
    dst_path = os.path.join(dst_dir, f)
    if os.path.isfile(src_path):
        shutil.copy(src_path, dst_path)

#まとめ

私たちは普段、上述したようなコードを使用しファイルを抽出しています。
Pythonを用いることができれば手作業で数時間かかるようなことも数分あれば出来てしまいます。
ぜひ、短縮できた時間の有効活用してください。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?