我爲我的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)
然而,這無法用
simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
,通過書面傳入json.dump的JSON( )本身從第一個字符開始是無效的。數據本身是不可疑的,因爲它可以得到的,所有純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"}
我沒有在那裏這可以從未來絲毫的想法。任何幫助是極大的讚賞!
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"]
更新2
原來,我面對錯誤是莫名其妙相關requests
模塊:如果我註釋掉import requests
,一切正常,但我無能,爲什麼發生這種情況,因爲json
和requests
模塊的文檔保持沉默任何不兼容性...
更新3
這似乎是一個機器相關的問題。我在另一臺機器上運行我的代碼,並在那裏完美地運行。 Python版本是2.7.12,OS是Ubuntu 16.04 x86_64,內核版本是4.4.0.38-兩種機器都是通用的...
你確定你正在閱讀你寫的同一個文件嗎? – Blender
@Blender:是的,我引用的文件是正確的。 –
嘗試在模式「wb」中寫入。 – JulienD