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模塊
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)