IOError открытие jpg в Python
Моя программа предлагает пользователю выбрать файлы (через главное окно PyQT4), а затем создает отчет в формате PDF в ReportLab.
Я получаю IOError на одном из 2 изображений, которые я пытаюсь включить. Оба изображения находятся в каталоге, где находятся все остальные файлы, которые я использую. Я также попытался загрузить другое изображение как оба изображения, без ошибок. Я попробовал это, используя другое изображение, которое находится вне каталога - работает нормально. Я подозревал, что, возможно, размер файла слишком велик для проблемного изображения, поэтому я перешел с изображения 450 КБ на изображение 45 КБ. Все еще нет игры в кости.
Код проблемы:
#from the code for the Compiled Window - this is how I acquire the images
...
def logo_pic(self):
self.Logo_picture = unicode(QtGui.QFileDialog.getOpenFileName())
self.LogoLabel.setText(self.Logo_picture) #this shows the user the path of the file they selected
def setup_pic(self):
self.setup_picture = unicode(QtGui.QFileDialog.getOpenFileName())
self.SetupLabel.setText(self.setup_picture)
...
#take the file path and turn it into a workable file name
setup_pic_title_index = str(cw.setup_picture).rfind('/') + 1
setup_pic_title = cw.setup_picture[setup_pic_title_index:]
Logo_picture_title_index = str(cw.Logo_picture).rfind('/') + 1
Logo_picture_title = cw.Logo_picture[Logo_picture_title_index:]
#this is where the image itself is pulled and scaled appropriately for the ReportLab document, and added to the list of items to include
elements.append(get_image('./' + Logo_picture_title, width = 9*inch))
elements.append(get_image('./' + setup_pic_title, width = 8*inch))
Вот ошибки, которые я получаю:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/Users/moi/etc", line 367, in <module>
elements.append(get_image('./' + setup_pic_title, width = 8*inch))
File "C:/Users/moi/etc", line 233, in get_image
img = utils.ImageReader(path)
File "C:\Python27\lib\site-packages\reportlab\lib\utils.py", line 585, in __init__
annotateException('\nfileName=%r identity=%s'%(fileName,self.identity()))
File "C:\Python27\lib\site-packages\reportlab\lib\utils.py", line 549, in __init__
self.fp = open_for_read(fileName,'b')
File "C:\Python27\lib\site-packages\reportlab\lib\utils.py", line 452, in open_for_read
raise IOError('Cannot open resource "%s"' % name)
IOError: Cannot open resource "./DSCN2223.JPG"
fileName=u'./DSCN2223.JPG' identity=[ImageReader@0x70b1870 filename=u'./DSCN2223.JPG']
Я включил код для логотипа и изображение настройки - информация в основном идентична. Кроме того, он работает с другим файлом.jpg за пределами каталога.
1 ответ
Я обнаружил, что проблема, с которой я столкнулся, была связана с тем, что я не использовал полный путь. Чтобы исправить эту проблему, я сохранил переменную NAMED pathname:
document_title_index = str(first_Fname).rfind('/') + 1 #find the last / and add 1
document_title = first_Fname[document_title_index: len(first_Fname)-4] #uses the index to grab the string that's affiliated with the first data file for naming the report
pathname = first_Fname[0:document_title_index] # grabs the pathname part to place new files correctly
Затем, когда я сохранял свои данные, я использовал путь, чтобы поместить их в нужное место - с исходными данными для отчетов INSTEAD о том, где они должны были оказаться раньше, с самим файлом.py:
plt.savefig(pathname + figname + '.jpg', dpi = 100) #save plots to the same place as the first data file