python - Python json.decoder.JSONDecodeError:期望值:第 1 行第 1 列(字符 0),路径名中有空格
问题描述
我正在通过 Windows 命令行使用 Python 3 脚本将文件上传到 REST API。文件名是传递给脚本的参数。除非路径名中有空格,否则一切正常。即c:\temp\myFolder\1.jpg
有效,但c:\temp\my Folder\1.jpg
引发错误:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
直到出现错误的代码如下:
def upload_photo(filename):
f = open(filename, "rb")
data = f.read()
data_md5 = hashlib.md5(data).hexdigest()
f.close()
r = requests.put('https://upload.mysite.com/{}'.format(filename), data=data)
response = json.loads(r.text)
我不知道如何解决它。谢谢您的帮助。
--编辑-- 完整回溯
c:\>python test.py "c:/temp/my folder/1.jpg"
Traceback (most recent call last):
File "test.py", line 144, in <module>
print(test(sys.argv[1]))
File "test.py", line 132, in upload_photo
response = json.loads(r.text)
File "C:\Users\Default\AppData\Local\Programs\Python\Python37-32\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\Default\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Default\Default\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
解决方案
您需要正确编码链接;转义无效字符。你可以用urllib
.
>>> import urllib
>>> filename = urllib.parse.quote('c:\temp\my Folder\1.jpg')
>>> 'https://upload.mysite.com/' + filename
'https://upload.mysite.com/c%3A%09emp%5Cmy%20Folder%01.jpg'
推荐阅读
- scala - Scala RxJava 参数表达式的类型与形参类型不兼容
- javascript - Javascript - 回调
- ruby-on-rails - Rails - 从 HTML 动态生成 PDF 并显示下载链接
- java - 接口混合继承不会在java中抛出错误?
- r - 使用 for 循环(r)创建变量以计算行间“是”的出现次数
- java - 关于理解 Apache Beam 的 wordCount 示例的问题
- ibm-watson - 在 WKS 上使用负面提及类
- elasticsearch - ElasticSearch 查询,匹配某个术语并在给定日期范围内计数
- sql - 如何将 TIMESTAMP 列中的时间与字符串格式列中的时间 (hH:MM:SS) 进行比较
- python - 为大型数据集组合日期、小时和间隔列的更快方法