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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

6523閲覧

pythonで特定番号に合致した画像ファイルをコピー・移動させたい

hidemomo

総合スコア31

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/09/30 08:35

実現したいこと

pythonで特定の画像番号(条件)に合致した画像ファイルをコピー・移動させたい。

発生している問題・エラーメッセージ

python初心者です。
リスト番号に合致する画像ファイルをコピーまたは移動したいのですが、条件合致後のコピーまたは移動のコードでスタックしています。ご教示頂けると嬉しいです。

該当のソースコード

python

1from PIL import Image 2import os, glob, shutil 3 4list_no = [1,2,3] #画像番号(条件) 5photos_dir = './pic_test' 6files = glob.glob(photos_dir + '/*.jpg') #画像ファイルの読込み 7#filesリスト 8['./pic_test\1_s.jpg', 9 './pic_test\2_s.jpg', 10 './pic_test\3_s.jpg', 11 './pic_test\4_s.jpg', 12 './pic_test\5_s.jpg'] 13 14for file in files: 15 file_name = file.strip('./pic_test\').strip('_s.jpg') 16 print(file_name) 17#[out] 181 192 203 214 225 23 24#list_no = [1,2,3]の画像ファイルをコピーまたは移動させたいのですが、以下でスタックしています。 25for i in list_a: 26 if i == file_name: 27 shutil.copy("./pic_test/*.jpg", "./pic_move/") 28

試したこと

shutil.copyやshutil.moveを試行しましたが、挙動しません。
for i in list_a:以下が間違っていると思うのですが解決法がわかりません。
そもそも考え方が違うかもしれません。
ご教示頂けると助かります。
よろしくお願いします。

環境

windows10
python:3.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じでしょうか?

python

1import glob 2import os 3import re 4import shutil 5 6no_list = [1, 2, 3] # 画像番号 7src_dirpath = 'images' # コピー元ディレクトリ 8dst_dirpath = 'output' # コピー先ディレクトリ 9 10# 出力ディレクトリが存在しない場合、作成する。 11os.makedirs(dst_dirpath, exist_ok=True) 12 13regex = re.compile(r'^(\d{1,})_s.(jpg|png|gif)$') 14for img_path in glob.glob(os.path.join(src_dirpath, '*.jpg')): 15 filename = os.path.basename(img_path) 16 17 # 数字部分を抽出する。 18 matches = regex.match(filename) 19 if not matches: 20 continue # マッチしない場合 21 22 no = int(matches.group(1)) 23 if no not in no_list: 24 continue # 移動しない番号の場合 25 26 # コピーする。 27 dst_path = os.path.join(dst_dirpath, filename) 28 shutil.copy(img_path, dst_path) 29 print('move: {} -> {}'.format(img_path, dst_path))
move: images/3_s.jpg -> output/3_s.jpg move: images/1_s.jpg -> output/1_s.jpg move: images/2_s.jpg -> output/2_s.jpg

投稿2018/09/30 09:40

tiitoi

総合スコア21954

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

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

hidemomo

2018/09/30 10:54

できました! 私では、とても書けないコードです。 ひとつずつ、しっかりと理解できるようにしたいと思います。 本当にありがとうございました。
tiitoi

2018/09/30 11:10

意図通り動いたようでよかったです。 解決済みであれば、質問をクローズしていただけますでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問