Ошибка: разрешение отклонено при использовании Image.open, пока файл существует - PullRequest
0 голосов
/ 27 февраля 2019

Я нахожу похожие темы, связанные с той же проблемой, но у меня нет такого решения.

Я использую python 3.7 в Windows 7.

Я использую API Flickr для запроса изображений с ключевым словом.Как только у меня есть URL-адреса, я использую PIL для загрузки файлов.Я запускаю следующий файл как администратор:

import flickrapi
import urllib
import urllib.request
from PIL import Image
from datetime import datetime

key='XXX'
mdp='XX'
#Flickr api access key 
flickr=flickrapi.FlickrAPI(key,mdp, cache=True)

#We are going to use two parameters : min_upload_date and max_upload_date to get more images. It has timestamp type 

def query_imgs(keyword,min_upload_date,max_upload_date): 
    imgs = flickr.photos.search(text=keyword,
                 tag_mode='all',
                 tags=keyword,
                 extras='url_c',
                 per_page=500,
                 sort='relevance',
                 min_upload_date=min_upload_date,
                 max_upload_date=max_upload_date,
                 privacy_filter=1,
                 relevance=1)
    return imgs[0]

def get_urls(imgs):
    urls = []
    for img in imgs:
        url = img.get('url_c')
        if (url != None):
            urls.append(url)
    urls=list(set(urls))
    nb_imgs=len(urls)
    return  (urls,nb_imgs)

def get_imgs(urls,keyword,count):
    for i in range(len(urls)):
        filename=keyword+'.'+str(count+i)+'.jpg'
        urllib.request.urlretrieve(urls[i], filename)
        image = Image.open(filename,'r') 
        image = image.resize((256, 256), Image.ANTIALIAS)
        image.save(filename)

def compute_timestamp(year):
"""Giving the year, return two timestamp correspond to the first day of January and February."""
    dt1=datetime(year,1,1)
    ts1=datetime.timestamp(dt1)
    dt2=datetime(year,2,1)
    ts2=datetime.timestamp(dt2)
    return ts1,ts2

years=[2013,2014,2015,2016,2017,2018]

 def main(keyword):
    count=0
    for year in years : 
        y,z=compute_timestamp(year)
        for i in range(11): 
            imgs=query_imgs(keyword,y+i*2764800,z+i*2678400)
        #2764800 correspond to 32 days, 2678400 to 31 days 
        #Ex : first period : 01/01 to 02/01, then 02/02 to 03/01 (approximatively)
            (urls,x)=get_urls(imgs)
            get_imgs(urls,keyword,count)
            count=count+x
            print(count,"Next Month")
    print("Next year")






main('Violence')

Файл python находится в моем H: \ EmotionDetection.Я бегу от имени администратора.

Иногда у меня нет ошибок.Но часто я получаю следующую ошибку:

введите описание изображения здесь

Это странно, потому что это работает для более чем 1500 изображений.Файл находится в папке, но когда я пытаюсь изменить его размер, он не работает.

Есть ли кто-нибудь, кто знает, как изменить мой код, чтобы он мог работать?

Заранее спасибо

...