Ceci devrait être une question très simple, pour laquelle je n'ai pas pu trouver de réponse par Google Recherche: Comment fermer la poignée de fichier ouverte par PYPDF "PDFFilerReader" Classe
Voici l'extrait: P>
import os.path from pyPdf import PdfFileReader fname = 'my.pdf' input = PdfFileReader(file(fname, "rb")) os.rename(fname, 'my_renamed.pdf')
4 Réponses :
Le système d'exploitation empêche un fichier d'être nommé, tandis que quelque chose d'autre l'a ouvert. C'est une bonne chose (TM).
Si vous êtes vraiment avoir à em> l'accès à partir de l'objet PDFFilerAreader (c'est-à-dire: si vous n'avez pas de référence à l'objet de fichier vous-même), vous pouvez utiliser Notez que le PDFFilerReader aura besoin d'un objet de fichier ouvert pour accéder au contenu du PDF (il ne tire pas tout en mémoire à partir du début), alors fermez uniquement le fichier lorsque vous avez terminé avec le lecteur. P> lecteur.stream. Fermer () Code> P>
Je suggérerais de gérer le fichier OUVERT OUVERT DE LA PDFFILEREADER
Votre code sera le suivant: P>
import os.path from pyPdf import PdfFileReader fname = 'my.pdf' fh = file(fname, "rb") input = PdfFileReader(fh) fh.close() os.rename(fname, 'my_renamed.pdf')
à la place à l'aide de entrée = pdffilereader (fichier (fname, "rb")) code>
Créez un flux d'entrée comme celui-ci
inputStream=file(fname, "rb")
input=PdfFileReader(inputStream)
Exécutez-vous des fenêtres et est-ce que
my_renamed.pdf code> existe avant de renommer?
Oui, j'ai oublié de mentionner que je gère Windows 7 32 32 bit et utilisez Python 2.5. Fichier 'my_renamed.pdf' n'existe pas
@romor
32 code> signifie que vous ne pouvez pas accéder au fichier car il est utilisé. Essayez de fermer
FNAME code> manuellement (après la lecture), puis renommez.
Oui, c'est ma question - comment fermer le fichier :)
fd = fichier (fname, 'rb'); entrée = pdffilereader (fd); "Lisez-le ici"; fd.close (); os.rename (...) code>
Excellent. Merci beaucoup. C'est ce que je cherchais, aussi lame que je paraisse: D
@Romor: Bonjour, votre question a-t-elle répondu? Si oui, pourriez-vous fermer votre question?