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

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

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

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

Q&A

解決済

2回答

2075閲覧

画像集約フォルダからランダムに画像を抽出したい。

Haru_

総合スコア1

Python

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

0グッド

0クリップ

投稿2021/08/06 03:56

前提・実現したいこと

10個新しいフォルダを作成し、別の画像集約フォルダからランダムに画像を5個ずつ取ってきて、作成したフォルダにコピーしたい。

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

下記の方法だと、1つのフォルダ内で重複しない画像をランダムに取ってくるようになると思うのですが、これを今回新しく作成したフォルダ内(51‐60まで)で重複しないようにしたいです。 方法がわからず、どう検索したらいいかもわかりません。

該当のソースコード

Python

1import os 2import glob, random 3import shutil 4 5start_num = 51 6end_num = 61 7new_dir_path = "‐new_dir_path-" 8 9for i in range(start_num, end_num): 10 os.mkdir(new_dir_path+str(i)) 11 photo_album_path = "-photo_album_path-" 12 photo_album_inside = os.listdir(photo_album_path) 13 chosen_photos = random.sample(photo_album_inside, 5) 14 15 for chosen_photo in chosen_photos: 16 chosen_photo_path = -photo_album_path-"+chosen_photo 17 new_chosen_photo_path = chosen_photo_path.replace("photo_album",str(i)) 18 shutil.copy(chosen_photo_path, new_chosen_photo_path)

試したこと

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答2

0

ベストアンサー

random.sampleで50個とって、5個ずつに分けましょう。

python

1>>> import random 2>>> sample = random.sample(list(range(200)), 50) 3>>> print(sample) 4[76, 182, 148, 24, 106, 58, 5, 115, 85, 195, 158, 191, 41, 53, 149, 78, 12, 181, 40, 22, 131, 9, 31, 118, 107, 133, 19, 26, 91, 129, 1, 147, 48, 166, 55, 164, 168, 161, 140, 198, 172, 187, 36, 92, 72, 119, 138, 170, 62, 4] 5>>> for i in range(0, 50, 5): 6... print(sample[i:i+5]) 7... 8[76, 182, 148, 24, 106] 9[58, 5, 115, 85, 195] 10[158, 191, 41, 53, 149] 11[78, 12, 181, 40, 22] 12[131, 9, 31, 118, 107] 13[133, 19, 26, 91, 129] 14[1, 147, 48, 166, 55] 15[164, 168, 161, 140, 198] 16[172, 187, 36, 92, 72] 17[119, 138, 170, 62, 4]

投稿2021/08/06 05:32

ppaul

総合スコア24666

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

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

Haru_

2021/08/06 06:22

ありがとうございます。わかりやすく、すぐに解決できました。
guest

0

こんな感じでしょうか.

python

1#省略 2 3new_chosen_photo_path_set = set() #新しく作成するファイルpathの集合 4dict_ = {} #元のファイルpathと新しく作成するファイルpathのdict 5 6while len(new_chosen_photo_path_set) < 10: 7 # 省略 8 chosen_photo = random.choice(photo_albam_inside) 9 chosen_photo_path = #省略 10 new_chosen_photo_path = #省略 11 new_chosen_photo_path_set.add(new_chosen_photo_path) 12 dict_[new_chosen_photo_path] = chosen_photo_path 13 14for new, old in dict_.items(): 15 shutil.copy(old,new)

setを使えば重複を避けれます.

投稿2021/08/06 05:32

編集2021/08/06 05:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Haru_

2021/08/06 06:23

ご回答ありがとうございます。当方、超初心者のため他の方をベストアンサーにさせていただきましたが、今後setに関しても勉強していければと思います。迅速なご回答感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問