0

PyPdf を使用してファイルから名前を抽出して、pdf ファイルのリストの名前を変更しようとしています。for ループを使用してファイルの名前を変更しようとしましたが、ファイルが別のプロセスによって使用されているというコード 32 のエラーが常に発生します。私はpython2.7を使用していますこれが私のコードです

import os, glob
from pyPdf import PdfFileWriter, PdfFileReader

# this function extracts the name of the file
def getName(filepath):
    output = PdfFileWriter()
    input = PdfFileReader(file(filepath, "rb"))
    output.addPage(input.getPage(0))
    outputStream = file(filepath + '.txt', 'w')
    output.write(outputStream)
    outputStream.close()

    outText = open(filepath + '.txt', 'rb')
    textString = outText.read()
    outText.close()

    nameStart = textString.find('default">')
    nameEnd = textString.find('_SATB', nameStart)
    nameEnd2 = textString.find('</rdf:li>', nameStart)

    if nameStart:
        testName = textString[nameStart+9:nameEnd]
        if len(testName) <= 100:
            name = testName + '.pdf'
        else:
            name = textString[nameStart+9:nameEnd2] + '.pdf'
    return name


pdfFiles = glob.glob('*.pdf')
m = len(pdfFiles)
for each in pdfFiles:
    newName = getName(each)
    os.rename(each, newName)
4

3 に答える 3

1

withPython のディレクティブの使用を検討してください。これを使用すると、自分でファイルを閉じる必要はありません。

def getName(filepath):
    output = PdfFileWriter()
    with file(filepath, "rb") as pdfFile:
        input = PdfFileReader(pdfFile)
        ...
于 2013-11-14T13:06:16.700 に答える