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

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

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

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

Q&A

解決済

2回答

721閲覧

for文等を用いての変数自動定義に関する質問

Bonobono1989

総合スコア1

Python

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

0グッド

0クリップ

投稿2021/06/13 04:13

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
指定した投資信託のデータを取得しようとしています。その際にcsvダウンロードと読み込み用のプログラムを都度追加しています。
for文とexec関数を用いて、自動的に指定した投資信託のデータを取得できるようにしたいです。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ

該当のソースコード

python

1isin_code = "JP90C000GMS8" #楽天・インデックス・バランス・ファンド(債券重視型) 2isin_code1 = "JP90C000H1T1" # eMAXIS Slim 全世界株式(オール・カントリー) 3isin_code2 = "JP90C0006LC1" # eMAXIS 日経225インデックス 4 5assets = [isin_code,isin_code1,isin_code2] 6 7myFund = Fund(isin_code) 8myFund1 = Fund(isin_code1) 9myFund2 = Fund(isin_code2) 10url = myFund.historical_data_url 11url1 = myFund1.historical_data_url 12url2 = myFund2.historical_data_url 13filename = 'isin_code.csv' 14filename1 = 'isin_code1.csv' 15filename2 = 'isin_code2.csv' 16response = requests.get(url) 17response1 = requests.get(url1) 18response2 = requests.get(url2) 19with open(filename ,mode='wb') as f: 20 f.write(response.content) 21with open(filename1 ,mode='wb') as f: 22 f.write(response1.content) 23with open(filename2 ,mode='wb') as f: 24 f.write(response2.content) 25 26data_path = os.getcwd() 27csvfile_path = glob.glob(data_path + '/isin_code*.csv')

試したこと

for i in assets:
exec('myFund' + str(i) )
exec('')
のようなループ文を用いてisin_code,isin_code1で定義した変数の最後の数字部分をMyFund〇,url〇,filename〇のように自動的に入力するようなループ文を試しているのですがうまくいきません、

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

python3.8

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

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

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

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

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

guest

回答2

0

baitokunさんからすでに回答が出ていますし、今回の場合はそのやりかたがベストだと思いますが、おせっかいということでで。

変数名を動的に生成したくなった場合、特に番号付きの場合、それはリストで表現すべきです。`exec('myFund' + str(i) )'このようにすれば(これではだめですが)できますがやるべきではありません。

かなりむりやりコードにするとこんな感じです。

python

1assets = [isin_code,isin_code1,isin_code2] 2 3myFund = [None, None, None] 4myFund[0] = Fund(assets[0]) 5myFund[1] = Fund(assets[1]) 6myFund[2] = Fund(assets[2])

こっちの方がよりよいですね。

python

1myFund = [] 2myFund.append(Fund(assets[0])) 3myFund.append(Fund(assets[1])) 4myFund.append(Fund(assets[2]))

そして、これを簡略化していくと、baitokunさんのコードになります。

投稿2021/06/13 04:59

TakaiY

総合スコア13790

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

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

0

ベストアンサー

そんなめんどくさいことしなくても、リストとfor文を使って

assets = ["JP90C000GMS8","JP90C000H1T1","JP90C0006LC1"] for i, isin_code in enumerate(assets): myFund = Fund(isin_code) url = myFund.historical_data_url filename = 'isin_code'+str(i+1)+'.csv' response = requests.get(url) with open(filename ,mode='wb') as f: f.write(response.content) data_path = os.getcwd() csvfile_path = glob.glob(data_path + '/isin_code*.csv')

で良いんじゃないですかね。

投稿2021/06/13 04:33

編集2021/06/13 04:34
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Bonobono1989

2021/06/13 04:42

ありがとうございます。やりたいことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問