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

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

ただいまの
回答率

90.61%

  • Python

    7495questions

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

  • JSON

    1116questions

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

  • import

    92questions

    自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

複数のファイル(辞書型データ)を読み込みループ処理で読み込みJson化したい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 326

KojiroIkeda

score 4

複数のファイル(辞書型データ)を読み込みループ処理で読み込みJson化しようとしています。

#dataNo.1 読み込みファイル例
d1 = {"result": [1, 21, 32, 34], "Time":[3600, 2400]}
import json

for i in range(100):
    filename = "dataNo." + str(i+1)
    import filename as R
    data = R.d1
    jdata = json.dumps(data)


importに変数を用いることはできないようで、filenameというファイルがないというエラーになってしまいます。

import json
import datafile as R

for i in range(100):
    data = R.str("d" + str(i+1))
    jdata = json.dumps(data)


こちらでもAttibution Errorになってしまいました。

どうにかして複数の辞書型データをループ処理でJson化できないものでしょうか。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

註: 編集前の質問に対する回答です。
ご提示のファイルが本当にそうなっているのなら、かなりのごり押しが必要です。

import json
import re

pattern1 = re.compile(r'([a-zA-Z]+):')
pattern2 = re.compile(r'([0-9]+l),')

for i in range(1):
    data = open(f'dataNo.{i+1}').read()
    data = data[data.index('{'):]
    data = pattern1.sub(r'"\1":', data)
    data = pattern2.sub(r'"\1",', data) 

    print(data)

実行結果 Wandbox

{"result": [1, "2l", 32, 34], "Time":[3600, 2400]}

質問編集を受けて

インポートする方法はhayataka1029さんが既に示されているので、他の方法をご紹介します。

import ast
import json

for i in range(1):
    data = open(f'dataNo.{i+1}').read()
    data = data[data.index('{'):]
    data = ast.literal_eval(data)

    print(type(data), data)

実行結果 Wandbox

<class 'dict'> {'result': [1, 21, 32, 34], 'Time': [3600, 2400]}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/01 10:19

    d1(dict型データ)の記載方法が間違っておりました。
    大変失礼いたしました。

    キャンセル

  • 2018/06/03 11:48

    できてしまいました。
    大変ありがとうございます。

    JSON文字列を作る方法もさまざまなのですね。
    大変勉強になりました。
    ありがとうございます。

    キャンセル

checkベストアンサー

+1

d1 = {result: [1, 2l, 32, 34], Time:[3600, 2400]}


これは(pythonのコードだと仮定しても)動作しません。

  • 2lのところがinvalid syntax
  • resultTimeが未定義変数名

2lはタイポで、resultTimeは(質問に書いてないだけで)上の部分で定義されている、あるいは"result" "Time"のタイポだと仮定します。

d1 = {"result": [1, 2, 32, 34], "Time":[3600, 2400]}

これなら、一応読み込めるはずです・・・。

import json

for i in range(100):
    filename = "dataNo." + str(i+1)
    R = __import__(filename)
    data = R.d1
    jdata = json.dumps(data)

こんなことしても誰も幸せにならないと思いますが。最初からjson文字列にしておけば良いだけの話なのですが、***.pyで作っちゃったデータが100件あるという状況なら仕方ないですね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/01 10:18

    d1(dict型データ)の記載方法が間違っておりました。
    大変失礼いたしました。

    キャンセル

  • 2018/06/01 10:19

    ありがとうございます。
    もともとはエクセルデータをVBAで加工したものです
    エクセルデータをJSON文字列へうまく変換できるかやってみます

    キャンセル

  • 2018/06/01 15:42

    それならcsvにしておいて、pythonでjsonに変換すればよくないですかね・・・

    キャンセル

  • 2018/06/03 11:15

    ありがとうございます。
    おっしゃる通りかと存じます。
    まずはJSON文字列はCSVから作る方向で考えます。
    csvファイル名の呼び出しであればループ処理ができそうです。

    キャンセル

0

読み込みするファイルはJSONではない?
jsonlint

d1 = {
    result: [1, 2 l, 32, 34],
    Time: [3600, 2400]
}
Error: Parse error on line 1:
d1 = {    result: [1, 
^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/03 11:15

    d1(dict型データ)の記載方法が間違っておりました。
    大変失礼いたしました。

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    JSONフォーマットの変形に関する質問

    [ { a: 1 b: 2 c: 3 } ] をpythonを用いて [ { "a": 1 "data": { "b": 2

  • 解決済

    jsonの整形について

    python初心者です。 jsonを整形する方法ですが、以下のような一行の構成から [ {}, {}, {} ] 以下のように複数行に整形したいです

  • 受付中

    大量のCSVデータの処理方法

    100個ほどCSVファイルがあり、 それぞれのファイルで、30×30のセルに数値が入力されています。 この100個のCSVファイルに対して、同じセル座標について最大値最小値を計算し

  • 解決済

    連番になっているファイル名の読み込み

    以下のようになっているフォルダの中にtsv形式のファイル"test.dat"があり、各ファイルのデータを読み込んで最終的にはグラフにして表示したいと思いました。 まず最初は、連番の

  • 解決済

    Pythonで粒子の解析

    Python初心者です。 100×100×500cmの箱があり、そこに以下のような座標を持つ10種類の粒子(ABCDE...)あったとします。 X     Y     Z

  • 解決済

    pythonでの変数やハッシュの扱いに関する質問です

    実現したいこと python でデータ処理をしています. for文内でpandasのデータフレームの抽出をして, それらを逐次異なる変数に入れたいのですが,いまいち変数の保存(定義

  • 解決済

    Python 3.x 辞書のキー値によって変換する場合の高速化

    Pythonにて、辞書(dict({key,value})を使って、list型の全要素をValue値に変換する際の、 高速化が可能かどうかをご教授いただきたいです。 dict1

  • 解決済

    cannot compute lda over an empty collection (no te...

    LDAを実行したいのですが 以下のエラーが表示されます。何が原因か教えてください。 やりたいことのイメージとしては、フォルダの各テキストファイルのトピックを知りたいといった感

同じタグがついた質問を見る

  • Python

    7495questions

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

  • JSON

    1116questions

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

  • import

    92questions

    自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。