2016-10-01 7 views
0

私はPythonプロジェクト用のセットアップスクリプトを作成しています。スクリプトは以下のようにjsonファイルからビルド設定を読み込みます。json.dump()によってjson.load()によって読み取られないファイル

with open('setup.conf','r') as configfile: 
    config = json.load(configfile) 

これは完全に機能します。その後、スクリプトで、私は、そのオブジェクトの一部に自分自身を制限し、別のファイルにこの部分を書く:少なくともいずれかのエラーが発生しない

config = config[arg] 
[...] 
with open('kivy/app.conf','w') as appconfig: 
    json.dump(config,appconfig) 

。私のメインのアプリの起動時に は、私はその後、私が作成したファイルを読みたい:

path = os.path.dirname(os.path.abspath(__file__)) 
with open(path + '/app.conf','r') as configfile: 
    config = json.load(configfile) 

これを、しかし、(JSONはjson.dumpによって書かれていることを示す

simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

で失敗します)自体は最初の文字以降は無効です。それが得ることができるように、データ自体は、すべてのプレーンなASCII文字、ない奇妙な改行コード等:

{"deploy_server": false, "run_server": true, "server": "127.0.0.1", "run_app": true, "deploy_iOS": false, "user": "", "debug": true, "path": "", "deploy_android": false, "port": "8000"} 

私は、これはから来ることができたわずかなアイデアを持っていないとしてunsuspiciousです。どんな助けでも大歓迎です!

UPDATEは

私は非常に同じコードは、上記のライブインタプリタセッションで動作することを発見しました。私は、これを取り巻くコードで奇妙なことが起こっているはずだと結論づけますが、私はここでも紛失しています。部屋にはっきりとした象がいるかもしれませんが、私は見ることができません。周囲のコードは次のようになります。

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.label import Label 
from kivy.uix.textinput import TextInput 
from foodcalendar import CalendarWidget 
from kivy.resources import resource_add_path 
import os 
import requests 
import json 


[...] 

class MyApp(App): 
    def __init__(self): 
     super(MyApp,self).__init__() 
     path = os.path.dirname(os.path.abspath(__file__)) 
     print path 
     with open(path + '/app.conf','r') as configfile: 
      for r in configfile: 
       print r 
       config = json.loads(r) 
     self.server = config["server"] 

UPDATE 2

それは私が直面していますエラーが何とかrequestsモジュールに関連していることが判明:私はimport requestsをコメントアウトした場合、予想通り、すべての作品jsonrequestsモジュールのドキュメントは、任意の非互換性について沈黙しているので、私は...、これが起こる理由として無知だ

UPDATE 3

これはマシンに依存する問題のようです。私は別のマシン上で自分のコードを実行し、そこに完璧に走った。 Pythonはバージョン2.7.12、OSはUbuntu 16.04 x86_64、カーネルバージョンは4.4.0.38-汎用です...

+0

あなたが書いた同じファイルを読んでいますか? – Blender

+0

@Blender:はい、私が参照しているファイルは正しいものです。 –

+0

モード "wb"で書き込もうとします。 – JulienD

答えて

-1

ファイルの内容として指定したテキストをコピーして変数に貼り付けました。

>>> import json 
>>> a=""" {"deploy_server": false, "run_server": true, "server": "127.0.0.1", "run_app": true, "deploy_iOS": false, "user": "", "debug": true, "path": "", "deploy_android": false, "port": "8000"}""" 
>>> json.loads(a) 
{'deploy_android': False, 'run_app': True, 'port': '8000', 'debug': True, 'deploy_server': False, 'server': '127.0.0.1', 'user': '', 'run_server': True, 'deploy_iOS': False, 'path': ''} 
>>> 

すべての作品。あなたもこれを試すことができます。リテラルテキストとしてこれを行ったのと同じ結果が得られた場合は、そのエラーがファイルの読み書きにあることを確認できます。あなたはjson.loadsにフィードしようとしているものの「プリント」を試すことができます

+0

私のためにコピーされ貼り付けられた文字列リテラルも機能します。あなたの考えに従えば、json.loads()をファイルのjson.load()ではなくファイル行で試しました。つまり、 'open(path + '/app.conf','r' )configfileとして: rのconfigfile: 印刷r config = json.loads(r) 'これは私に同じ例外を与えます。奇妙なことですが、非常に同じコードがインタープリタセッションで動作するので、周囲のコードには何か変わったことがあります。 –

関連する問題