【发布时间】:2017-02-10 05:57:36
【问题描述】:
我正在为我的 Python 项目创建一个设置脚本。该脚本从 json 文件中读取构建配置,如下所示:
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"}
我不知道这可能来自哪里。非常感谢任何帮助!
更新
我发现上面的代码在实时解释器会话中也能正常工作。我由此得出结论,围绕此的代码中肯定发生了一些奇怪的事情,但我在这里也不知所措:房间里可能有一只明显的大象,但我看不到它。周围的代码如下所示:
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 版本,操作系统是 Ubuntu 16.04 x86_64,两台机器上的内核版本都是 4.4.0.38-generic...
【问题讨论】:
-
你确定你正在阅读你写的同一个文件吗?
-
@Blender:是的,我引用的文件是正确的。
-
尝试在“wb”模式下写入。
-
只是一个疯狂的猜测......您可能在文件的开头有一些垃圾。也许是BOM?
print(repr(open(filaname).read()))说什么? -
这个错误simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0),表明文件为空。除了在交互式会话中工作的事实之外,它让我说:您尝试阅读的文件不是您期望的文件。你应该控制两次所有路径,至少有一个可能是错误的
标签: python json python-2.7