首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用for循环重命名pdf文件列表

用for循环重命名pdf文件列表
EN

Stack Overflow用户
提问于 2013-11-14 12:28:34
回答 3查看 932关注 0票数 0

我试图通过使用PyPdf从文件中提取名称来重命名一个pdf文件列表。我尝试使用for循环来重命名文件,但是总是会出现一个错误,代码32说该文件正被另一个进程使用。我正在使用python2.7,这是我的代码

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-14 12:46:08

您不会关闭pdf阅读器使用的输入流(文件)。因此,当您尝试重命名文件时,它仍然是打开的。

所以,代替这个:

代码语言:javascript
复制
input = PdfFileReader(file(filepath, "rb"))

试试这个:

代码语言:javascript
复制
inputStream = file(filepath, "rb")
input = PdfFileReader(inputStream)
(... when done with this file...)
inputStream.close()
票数 0
EN

Stack Overflow用户

发布于 2013-11-14 13:06:16

考虑使用Python的with指令。使用它,您不需要自己处理关闭文件的操作:

代码语言:javascript
复制
def getName(filepath):
    output = PdfFileWriter()
    with file(filepath, "rb") as pdfFile:
        input = PdfFileReader(pdfFile)
        ...
票数 1
EN

Stack Overflow用户

发布于 2013-11-14 12:48:31

它看起来不像关闭与PDF读取器对象关联的文件对象。虽然它可能在函数的末尾被自动关闭,但为了确保您可能希望创建一个单独的文件对象,然后传递给PdfFileReader,然后在完成时关闭文件句柄。那就改名吧。

以下内容来自SO:How to close pyPDF "PdfFileReader" Class file handle import os.path from pyPdf import PdfFileReader

代码语言:javascript
复制
fname = 'my.pdf'
fh = file(fname, "rb")
input = PdfFileReader(fh)

fh.close()
os.rename(fname, 'my_renamed.pdf')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19977670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档