2014-07-26 1 views
0

이것은 내가 찾고있는 코드입니다. zip을 임시 디렉토리로 추출한 다음 Pil "Image.open"을 사용하여 추출 된 파일.Python PIL이 이미지 대신 디렉토리를 가져오고 있습니다.

import os 
import re 
import shutil 
import zipfile 
import tempfile 
from natsort import natsorted 
from epubpack import epubpack 
from PIL import Image 
import uuid 

def cbz2epub3(cbzfname, epubfile='out.eub', tmpldir='template', mangamode=False, singlepage=False): 
# working dir 
imgdir = tempfile.mkdtemp() 
workdir = tempfile.mkdtemp() 
# convert 
img_files = importImageFromZip(cbzfname, imgdir, mangamode=mangamode, singlepage=singlepage) 
title = guessTitle(cbzfname) 
ttbl = genTemplateInfo(img_files, title, mangamode=mangamode) 
epubMakeTree(tmpldir, workdir, ttbl) 
for fname in os.listdir(imgdir): 
    shutil.move(os.path.join(imgdir, fname), os.path.join(workdir, 'EPUB', 'Image')) 
epubpack(workdir, epubfile) 
# cleanup 
os.rmdir(imgdir) 
shutil.rmtree(workdir) 

def importImageFromZip(cbzfname, outdir, mangamode=False, singlepage=False): 
# extract 
cbz = zipfile.ZipFile(cbzfname,'r') 
fnames = cbz.namelist() 
cbz.extractall(outdir) 
cbz.close() 
# change name 
print "Src images: %d" % len(fnames) 
nlenw = len(str(len(fnames))) 
new_fnames = [] 
idx = 0 
for fname in natsorted(fnames): 
    ext = os.path.splitext(fname)[1] 
    src = os.path.join(outdir, fname) 
    if fname == 'Thumbs.db': 
     os.remove(src) 
     continue 
    idx += 1 
    im = Image.open(src) 

는하지만 오류가 밖으로 "SRC는"디렉토리입니다,하지만 그 os.path.join 파일 이름을 줄 것이다 읽어 말.

Traceback (most recent call last): 
File "gui.py", line 40, in OnDropFiles 
output = cbz2epub3(filename, epubname, mangamode=mangamode, singlepage=singlepage) 
File "/home/dave/Documents/cbz2epub3-master/cbz2epub3.py", line 33, in cbz2epub3 
img_files = importImageFromZip(cbzfname, imgdir, mangamode=mangamode, singlepage=singlepage) 
File "/home/dave/Documents/cbz2epub3-master/cbz2epub3.py", line 62, in importImageFromZip 
im = Image.open(src) 
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1996, in open 
fp = builtins.open(fp, "rb") 
IOError: [Errno 21] Is a directory: '/tmp/tmpjsosRY/test/ 

아무도 도와 줄 수 있습니까?

+0

'os.listdir'은 파일과 디렉토리를 모두 나열한다고 생각합니다. 거기에 폴더가 있습니까? – Salem

+0

'im = Image.open (src)'라인을 호출하기 전에'fname' 변수를 출력하여 비어 있지 않은지 확인할 수 있습니까? – miindlek

+0

zip 파일의 구조를 게시하십시오. – miindlek

답변

0

zip 파일에 /test이라는 폴더가있는 것 같습니다. Image.open(src)으로 전화하기 전에 빠른 수정으로 src 경로가 파일인지 확인할 수 있습니다.

... 
src = os.path.join(outdir, fname) 
if not os.path.isfile(src): 
    continue 
if fname == 'Thumbs.db': 
    os.remove(src) 
    continue 
idx += 1 
im = Image.open(src) 
+0

그게 지퍼의 내부 폴더를 트립하고 있었어. 이것에 정말 감사드립니다. –

관련 문제