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

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

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

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

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

Python

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

Q&A

解決済

2回答

1022閲覧

jsonファイルからipynbファイルへのインポートに関して【Jupyter lab】

kaoru_mitoma

総合スコア3

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2023/03/18 21:43

実現したいこと

プログラミング初学者です。
Jupyter lab内で、jsonファイルからipynbファイルへのインポート?ができません。
具体的にはjsonファイルに暗号キーを記入し、ipynbファイルで使えるようにしたいのです。
以下に画像を付しておきます。
イメージ説明
イメージ説明

udemyでの講義の一環として出てきました。
上の画像1枚目下の方にある

{ "KEY": "YOUR_KEY", "ENDPOINT": "YOURT_ENDPOINT" }

に関しては講師がしていたため、正直なんのためなのかよくわかりませんでしたが、とりあえず記入しました。
jsonに関して、YOUR_KEY ,KEYに関して2つあるのはトライしてみただけなので、KEY,ENDPOINTに関しては不必要だと考えています。

前提

Jupyterlab使用
python3.9
プログラミング初学者

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

KeyError: 'YOUR_KEY'

該当のソースコード

python

1pip install --upgrade azure-cognitiveservices-vision-computervision 2!pip3 install pillow 3from azure.cognitiveservices.vision.computervision import ComputerVisionClient 4from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes 5from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes 6from msrest.authentication import CognitiveServicesCredentials 7 8from array import array 9import os 10from PIL import Image 11import sys 12import time 13import json 14with open('secret.json') as f: 15 secret = json.load(f) 16{ 17 "KEY": "YOUR_KEY", 18 "ENDPOINT": "YOURT_ENDPOINT" 19} 20KEY = secret["YOUR_KEY"] 21ENDPOINT = secret["YOUR_ENDPOINT"]

json

1{"YOUR_KEY": "○○○"} 2{"YOUR_ENDPOINT": "×××"} 3{"KEY": "○○○"} 4{"ENDPOINT": "×××"}

試したこと

Note: you may need to restart the kernel to use updated packages.
とも表示されているため(画像1枚目)ツールばより[Kernel] - [Restart] からrestartしました。
ただし、restartして、リロードしても表示が消えることはありませんでした。

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

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

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

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

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

jbpb0

2023/03/18 23:22 編集

質問のコードを KEY = secret["YOUR_KEY"] ENDPOINT = secret["YOUR_ENDPOINT"] ↓ 変更 print(secret) として実行したら、何て表示されますでしょうか? (データの表記は「○○○」とかでいいです)
jbpb0

2023/03/19 00:03 編集

「secret.json」ですが、質問の記載のような、各行が「{...}」となってるので合ってますでしょうか? https://qiita.com/miso_taku/items/7d532d87b3a7d675466c の「ソースコード」の「secret.json」のような、一つの「{...}」の中に「"KEY": "○○○"」とかが「,」で連結されてる形式ではありませんでしょうか? > 上の画像1枚目下の方にある...に関しては講師がしていた が、「secret.json」の書き方の説明ではないのでしょうか? { "KEY": "YOUR_KEY", "ENDPOINT": "YOURT_ENDPOINT" } の、「YOUR_KEY」と「YOURT_ENDPOINT」を、本当のデータに置き換えたのが「secret.json」 【追記】 ただし、もし「secret.json」が本当は上記の通りなら、コードの KEY = secret["YOUR_KEY"] ENDPOINT = secret["YOUR_ENDPOINT"] は KEY = secret["KEY"] ENDPOINT = secret["ENDPOINT"] になると思うのですが、コードの上記部分は正しいのですよね? コードが正しいなら、私が推定した「secret.json」の形式は間違ってることになります
kaoru_mitoma

2023/03/19 11:37 編集

返答が遅くなり申し訳ございません。 >print(secret) として実行したら、何て表示されますでしょうか? {'cells': [{'cell_type': 'code', 'execution_count': 10, 'id': '○○○', 'metadata': {}, 'outputs': [{'data': {'text/plain': ["{'KEY': '○○○',\n", " 'ENDPOINT': '○○○'}"]}, 'execution_count': 10, 'metadata': {}, 'output_type': 'execute_result'}], 'source': ['{\n', ' "KEY": "○○○",\n', ' "ENDPOINT": "○○○"\n', '}']}, {'cell_type': 'code', 'execution_count': None, 'id': '○○○', 'metadata': {}, 'outputs': [], 'source': []}], 'metadata': {'kernelspec': {'display_name': 'Python 3 (ipykernel)', 'language': 'python', 'name': 'python3'}, 'language_info': {'codemirror_mode': {'name': 'ipython', 'version': 3}, 'file_extension': '.py', 'mimetype': 'text/x-python', 'name': 'python', 'nbconvert_exporter': 'python', 'pygments_lexer': 'ipython3', 'version': '3.9.13'}}, 'nbformat': 4, 'nbformat_minor': 5} と表示されます。 >~「,」で連結されてる形式ではありませんでしょうか? >「secret.json」の書き方の説明ではないのでしょうか? 今確認したところ、jbpb0様のご指摘通り、間違っていました。ありがとうございます。 ご指摘のとおり、secret.jsonは { "KEY": "○○○", "ENDPOINT": "○○○" } と変更し、物体検出アプリ#2に関しては { "KEY": "YOUR_KEY", "ENDPOINT": "YOURT_ENDPOINT" } を削除し、 KEY = secret["YOUR_KEY"] ENDPOINT = secret["YOUR_ENDPOINT"] を、 KEY = secret["KEY"] ENDPOINT = secret["ENDPOINT"] と変更いたしました。 もともと理解できていなかったところが、理解でき、問題なく動くと思われましたが、やはり 物体検出アプリ#2.ipynbを実行すると、 --------------------------------------------------------------------------- KeyError Traceback (most recent call last) /var/folders/zf/23xsqbvj05n7_5kr_80h5f9c0000gn/T/ipykernel_23155/1472242008.py in <module> ----> 1 KEY = secret["KEY"] 2 ENDPOINT = secret["ENDPOINT"] KeyError: 'KEY' と出てきてしまいます。 私の勝手な予想では secret.jsonファイルをopenできていないのかと思い、secret.jsonファイルのpathを指定して 開こうとしたのですが、うまくいきませんでした。どちらも保存してから実行しています。 人任せで申し訳ございませんが、考えうる原因はございますでしょうか?
jbpb0

2023/03/20 05:01 編集

たとえば、「secret.json」の内容が { "KEY": "111", "ENDPOINT": "aaa" } だとして、それがカレントディレクトリに置いてあるとします (上記はインデントは消えてますが、実際はあります) 質問のコードの一部を取り出した (インデントは消えてますが、実際はあります) import json with open('secret.json') as f: secret = json.load(f) を実行した後に print(secret) を実行したら、 {'KEY': '111', 'ENDPOINT': 'aaa'} と表示されるはずで、その状態なら、 > ----> 1 KEY = secret["KEY"] KeyError: 'KEY' とはならないはず 質問者さんの現在の環境で、どうなるか確認してみてください print(secret) を実行して {'KEY': '111', 'ENDPOINT': 'aaa'} と表示されないなら、まだ何かが間違ってます (もちろん、上記の「111」と「aaa」は例なので、実際のデータに読み替えてください)
jbpb0

2023/03/20 13:56 編集

私の一つ前のコメントのようにやってみて、まだ何かが間違ってることが分かった場合は、以下を見てください jupyterで下記を実行したら、カレントディレクトリにあるファイルやディレクトリの一覧が表示されるので、そこに「secret.json」があるか、確認してください !ls -l カレントディレクトリに「secret.json」があることが確認できたなら、jupyterで下記を実行してください !cat secret.json そうすれば、「secret.json」の内容が表示されますが、それは下記と一致しますでしょうか? (インデントは消えてますが、実際はあります) { "KEY": "111", "ENDPOINT": "aaa" } 結果表示が上記と一致しなければ、「secret.json」の内容が間違ってます (もちろん、上記の「111」と「aaa」は例なので、実際のデータに読み替えてください) 【追記】 質問の二つ目の画像を見て気になるのですが、もしかして「secret.json」をjupyterで作成してませんでしょうか? もしそうしてるなら、そうではなくテキストエディターで作成してみてください テキストエディターは、使い慣れてるものを使えばいいですが、macならテキストエディットでもいいです テキストエディットを使う場合は、「フォーマット」が「標準テキスト」になってる(「リッチテキストにする」と表示されてる)ことを確認してから、保存してください 参考 https://otona-life.com/2022/11/07/142001/ の「テキストエディットの起動方法」 https://support.apple.com/ja-jp/guide/textedit/txte51413d09/mac の「書類のフォーマットを変更する」
kaoru_mitoma

2023/03/21 13:47 編集

結論 テキストエディットでsecret.jsonを作り直したところ、問題なく実行されました。 毎回丁寧にご回答してくださりありがとうございます。 print(secret,json)としたところ {'KEY': '111', 'ENDPOINT': 'aaa'} と表示され、 KEY = secret["KEY"] ENDPOINT = secret["ENDPOINT"] も、問題なく実行できました。ありがとうございます。 そこで質問なのですが、なぜjupyter でsecret.jsonを作成してはいけないのでしょうか? secret.jsonをjupyterで編集した際には { "KEY": "111", "ENDPOINT": "aaa" } としか表示されていなかったのが、テキストエディット,vscodeで表示した時は、 { "cells": [ { "cell_type": "code", "execution_count": null, "id": "○○○", "metadata": {}, "outputs": [], "source": [ "{\n", " \"KEY\": \"○○○\",\n", " \"ENDPOINT\": \"○○○/\"\n", "}" ] }, { "cell_type": "code", "execution_count": null, "id": "○○○", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 5 } と表示され、明らかに問題があるのは見受けられます。
jbpb0

2023/03/21 14:01

> なぜjupyter でsecret.jsonを作成してはいけないのでしょうか? 「物体検出アプリ#2.ipynb」をテキストエディットで開いたら、分かると思います
kaoru_mitoma

2023/03/21 14:25

なんとなく理解できました。 ありがとうございます。 jupyter labで編集すると、 "cell_type": "code", "execution_count": 1, "id": "f6d19b7b-46b1-403b-b7f3-d7ebe72a8848", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: pillow in /Users/○○○/opt/anaconda3/lib/python3.9/site-packages (9.2.0)\n" ] } ], のようにセルごとの情報が入るのですね。 ありがとうございます。 勉強になります。
guest

回答2

0

ベストアンサー

そのudemyの講座「爆速で5つのPython Webアプリを開発」を以前購入してて、まだ見てなかったので、該当するところを見ました

 
「43 必要な準備」の2分5秒から、
「secret.jsonというjsonファイルに、こういった形でキーとエンドポイントを入れてます」
と説明しながら、下記を見せてますよね

json

1{ 2 "KEY": "YOUR_KEY", 3 "ENDPOINT": "YOUR_ENDPOINT" 4}

つまり、上記は質問に書いてるようなpythonコードの一部ではないし、「secret.json」は質問のような書き方ではなく上記のように書く、ということです

また、2分11秒から、上記「secret.json」の「YOUR_KEY」と「YOUR_ENDPOINT」のところに
「私のキーとエンドポイントを入れてる」
と言ってますよね
質問者さんも同様にしないといけません

 
3分14秒から書いてるコードは、質問のコードとは違い、下記の通り

python

1KEY = secret["KEY"] 2ENDPOINT = secret["ENDPOINT"]

 
udemyの講座を、再度じっくりと見直してみてください

投稿2023/03/19 10:21

編集2023/03/19 10:23
jbpb0

総合スコア7651

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

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

0

提示されているsecret変数値の型は辞書というものです。
辞書型では、複数の要素を'キー':'値'というカタチで持ちます。
つまりキーを指定することで、それに対応する値を得ることができます。
以下は簡単な使用例です。

Python

1dct = {'住所':'東京都','名前':'アリス'} 2print(dct['住所']) # 東京都

参考:[Python入門]辞書

以上をふまえるとKEY = secret['YOUR_KEY']ではなくKEY = secret['KEY']と書くべきことが理解できると思います。

Python

1secret = {'KEY':'YOUR_KEY', 'ENDPOINT':'YOUR_ENDPOINT'} 2KEY = secret['KEY'] 3ENDPOINT = secret['ENDPOINT'] 4print(KEY, ENDPOINT) # YOUR_KEY YOUR_ENDPOINT

投稿2023/03/19 00:10

can110

総合スコア38233

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問