import json #一
import os #二
from urllib.request import urlretrieve #三
with open(r'F:/imaterialist-product-2019-master-码隆产品识别大赛/imaterialist-product-2019/train.json','r',encoding = 'utf-8') as f:
txt = json.load(f) #一
for d in txt["images"]:
try:
url = d['url'] #下载地址, str
name = d['id'] #图片名称,str
class_name = str(d['class']) #文件夹名字, int
if class_name == ' ':
continue
path = 'F:/imaterialist-product-2019-master-码隆产品识别大赛/imaterialist-product-2019/train/' + class_name + '/'
if os.path.exists(path): #判断路径是否已存在, 二
pass
else:
os.makedirs(path) #不存在则创建文件路径, 二
urlretrieve(url, path + name) #下载图片并存储, 三
except:
print(d.items())
continue
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
python中,专门处理json格式的模块: json 和 picle模块
Json 模块提供了四个方法: dumps、dump、loads、load
pickle 模块也提供了四个功能:dumps、dump、loads、load
1、dumps、dump:序列化方法
json.dumps()只完成了序列化为str(序列化、无文件操作)
json.dump()必须传文件描述符,将序列化的str保存到文件中(序列化 + 写入文件)
import json
data = [{ 'a': 1, 'b':2, 'c':3 }]
json.dumps(data)
filename = ('a.txt','w')
json.dump({'a':4, 'b':5 }, filename, indent = 4)
2、loads、load:反序列化方法
loads(filename.read())只完成了反序列化(无文件操作、反序列化)
json.load(filename)只接受文件描述符,完成了读取文件和反序列化(读文件 + 反序列化 )
import json
with open('a.json', 'r', encoding = 'utf-8') as f:
aa = json.loads(f.read())
f.seek(0)
bb = json.load(f)
3、json和pickle四种方法的用法相同,json序列化出来的格式更通用(其他语言都认识)、pickle序列化出来的格式只有python认识,但pickle序列化功能更强大,可以序列化函数。
4、python对象与json对象的对应关系
python:dict list、tuple str int、float True False None
JSON :object array string number ture false null
Python对文件操作需要import os,包含三个重要的函数。
os.psth.exists(path)判断一个目录是否存在
os.makedirs(path)多层创建目录(当父目录不存在时,会创建父目录)
os.mkdir(path)创建目录(当父目录不存在时,不回创建父目录)
如上例代码:第一次循环创建目录时,使用os.makedirs(path)会提示目录不存在,主要原因是还不存在train;但是使用os.makedirs(path)不会报错,它可以自己创建train。
注意:路径最好使用‘/’,减少使用‘\’,如path = 'F:/imaterialist-product-2019/train/' + class_name + '/'
参数1:图片下载路径
参数2:图片名称及存储路径
#方法一
from urllib.request import urlretrive
urlretrive(arg1, arg2)
#方法二
import requests
r = requests.get(arg1)
with open(arg2, 'wb') as f:
f.write(r.content)