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

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

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

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

Q&A

解決済

1回答

613閲覧

繰り返し実行をそれぞれ別のファイルに格納する

hanaaaa

総合スコア5

Python

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

0グッド

0クリップ

投稿2020/08/14 10:40

編集2020/08/14 11:14

前提・実現したいこと

for文を用いて繰り返し実行するプログラムを、実行ごとに別のファイルに格納したいです。
dataファイルの中にF1-1,F1-2,...,F1-12と実行結果ファイルを作成するようなイメージです。

下記ソースには目印のため”x”と書いています。

また、range関数に要素数を指定せずに実行させる方法や、別の関数があれば教えていただきたいです。

該当のソースコード

python

1 2from pathlib import Path 3from PIL import Image 4 5 6for i in range(6): 7 pair2=(pair[i]) 8 print(pair2) 9 10 11 for x in range(12): 12 img_dir1 = Path(pair2[0]) 13 img_dir2 = Path(pair2[1]) 14 output_dir = Path("fiw/data/F1-"+ "x") # 出力ディレクトリ 15                          ⬆ 16 ここの部分 17 output_dir.mkdir(exist_ok=True) 18     19     x=x+1 20 21 ....... 22

追記・全ソースコード

python

1from pathlib import Path 2from PIL import Image 3 4 5for i in range(6): #F0001には6ファイルあったから6としているが、それぞれに合うようにしたい 6 pair2=(pair[i]) 7 print(pair2) 8 9 for x in range(11): 10 img_dir1 = Path(pair2[0]) # 左側の画像があるディレクトリ 11 img_dir2 = Path(pair2[1]) # 右側の画像があるディレクトリ 12 output_dir = Path(f"fiw/data/F1-{x}") # 出力ディレクトリ 13 output_dir.mkdir(exist_ok=True) 14 15 def concat_h(img1, img2, color="black"): 16 dst = Image.new("RGB", (img1.width + img2.width, max(img1.height, img2.height)), color) 17 dst.paste(img1, (0, 0)) 18 dst.paste(img2, (img1.width, 0)) #横に結合プログラム 19 20 return dst 21 22 23 24 for path1, path2 in itertools.product(img_dir1.iterdir(), img_dir2.iterdir()): 25 print(f"concat {path1} and {path2}") 26 img1 = Image.open(path1) 27 img2 = Image.open(path2) 28 29 dst = concat_h(img1, img2) 30 31 save_path = output_dir / f"{path1.stem}_{path2.stem}.jpg" 32 dst.save(save_path) 33 34 35 36 37 def concat_h(img2, img1, color="black"): 38 dst = Image.new("RGB", (img2.width + img1.width, max(img2.height, img1.height)), color) 39 dst.paste(img2, (0, 0)) 40 dst.paste(img1, (img2.width, 0)) 41 42 return dst 43 output_dir = Path(f"fiw/data/F1-{x+1}") # 出力ディレクトリ 44 output_dir.mkdir(exist_ok=True) 45 46 47 for path2, path1 in itertools.product(img_dir2.iterdir(), img_dir1.iterdir()): 48 print(f"concat {path2} and {path1}") 49 img1 = Image.open(path2) 50 img2 = Image.open(path1) 51 52 dst = concat_h(img1, img2) 53 54 save_path = output_dir / f"{path2.stem}_{path1.stem}.jpg" 55 dst.save(save_path) 56 x=x+1 57i=i+1 58

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

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

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

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

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

guest

回答1

0

ベストアンサー

f文字列で入れると良いかと。
output_dir = Path(f"fiw/data/F1-{x}")

python3.5以前なら、formatでも、
Pythonの文字列フォーマット(formatメソッドの使い方)

range関数に要素数を指定せずに実行させる方法

ここの文章は意図がよくわかりませんでした。

投稿2020/08/14 10:46

jeanbiego

総合スコア3966

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

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

hanaaaa

2020/08/14 11:12

ご回答ありがとうございます! rangeの件は私の学習不足です。失礼いたしました。 ご回答を参考に実行することができたのですが、各ファイルに全実行データが保存されてしまいます...。よろしければ全コードを追記いたしますので用い方があっているか確認していただけませんでしょうか。
jeanbiego

2020/08/14 11:57

「各ファイルに全実行データが保存され」るというのはよくわかりませんでした(ファイル→フォルダですか?) さしあたり、for文でoutput_dirが毎回上書きされてるのは設計の意図通りなのでしょうか。 設計通りではない場合、for文の構造をまるっと変えるか、各output_dirをlistにでも格納して適宜取り出すとかが良いかもしれません。
hanaaaa

2020/08/14 12:21

ご回答ありがとうございます。少し勘違いをしており、for文をまとめることで理想通りに実行することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問