14

I am getting this error when I run extract_img.py file:

RuntimeError(f“Directory '{directory}' does not exist”)
RuntimeError: Directory 'static/' does not exist from import fitz

I don't understand why this sends me back this error message. I saw the conversation dealing with this topic before but I did not understand the solution. Could you help me?

This file is intended to extract certain images from a PDF filesome images in a file.

from os import chdir
import shutil, os
import io
from PIL import Image
import fitz
from unif_noun import unif_noun #other file python for change file noun.

def execute_func(rootdir):
for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        filepath = subdir + os.sep + file
        if filepath.endswith(".pdf"):
            #extract(f"{filepath}")
            # open the file
            pdf_file = fitz.open(file)
            images = list()
            for page_index in range(len(pdf_file)):
                # get the page itself
                page = pdf_file[page_index]
                image_list = page.getImageList()
                # printing number of images found in this page
                # if image_list:
                #     print(f"[+] Found a total of {len(image_list)} images in page {page_index}")
                # else:
                #     print("[!] No images found on page", page_index)
                for image_index, img in enumerate(page.getImageList(), start=1):
                    images.append(img[0])
            for i, xref in enumerate(images, start=1):
                if 1 < i < len(images) - 3:
                    # extract the image bytes
                    base_image = pdf_file.extractImage(xref)
                    image_bytes = base_image["image"]
                    # get the image extension
                    image_ext = base_image["ext"]
                    # load it to PIL
                    image = Image.open(io.BytesIO(image_bytes))
                    # save it to local disk
                    image.save(open(f"{unif_noun(file)}.{image_ext}", "wb"))
                    # Déplacer un fichier du répertoire
                    for subdir, dirs, files in os.walk(rootdir):
                        for f in files:
                            source = subdir
                            destination = 'C:/Users/.../VS Projects/img'
                            filename = os.path.basename(source)
                            dest = os.path.join(destination,filename)
                            shutil.move(source + f"{unif_noun(file)}.{image_ext}", dest)
execute_func(r'C:/Users/Factoryz Amandine/OneDrive/Bureau/Python/CCOR02752150_3.pdf')[enter image description here][1]
shaedrich
  • 5,457
  • 3
  • 26
  • 42
Baker
  • 141
  • 1
  • 1
  • 3
  • If it's a hierarchy of directories, everything along the way has to exist. I think it would be clearer what is failing if you also showed a bit more of the call stack in the error message. – Ben Y Jun 15 '21 at 18:43

2 Answers2

30

uninstall the existing fitz module/package

pip uninstall fitz

Install pymupdf module

pip install pymupdf

source: Unable to use fitz with python 3.8

thrinadhn
  • 1,673
  • 22
  • 32
2

I had the same problem and installing PyMuPDF fixed it for me. ( Guess this is not the first time installing PyMuPDF solving other problems too with fitz )

pip3 install PyMuPDF
Peter Csala
  • 17,736
  • 16
  • 35
  • 75
Rafeek
  • 41
  • 8