读取PDF元数据并写入CSV的脚本



我写了一个脚本来读取PDF元数据以简化工作中的任务。从长远来看,当前的工作版本不是很可用:

from pyPdf import PdfFileReader
BASEDIR = ''
PDFFiles = []
def extractor():
    output = open('windoutput.txt', 'r+')
    for file in PDFFiles:
        try:
            pdf_toread = PdfFileReader(open(BASEDIR + file, 'r'))
            pdf_info = pdf_toread.getDocumentInfo()
            #print str(pdf_info)   #print full metadata if you want
            x = file + "~" + pdf_info['/Title'] + " ~ " + pdf_info['/Subject']
            print x
                output.write(x + 'n')
            except:
                x = file + '~' + ' ERROR: Data missing or corrupt'
                print x
                output.write(x + 'n')
                pass
    output.close()
if __name__ == "__main__":
    extractor()

当前,如您所见,我必须手动输入工作目录并手动填充PDF文件列表。它还只能以我可以将/粘贴/分开的格式打印出终端中的数据。

我希望脚本能自动在任何目录中自动工作,然后将其放入并填充CSV文件,以便于使用。到目前为止:

from pyPdf import PdfFileReader
import csv
import os
def extractor():
    basedir = os.getcwd()
    extension = '.pdf'
    pdffiles = [filter(lambda x: x.endswith('.pdf'), os.listdir(basedir))]
    with open('pdfmetadata.csv', 'wb') as csvfile:
        for f in pdffiles:
            try:
                pdf_to_read = PdfFileReader(open(f, 'r'))
                pdf_info = pdf_to_read.getDocumentInfo()
                title = pdf_info['/Title']
                subject = pdf_info['/Subject']
                csvfile.writerow([file, title, subject])
                print 'Metadata for %s written successfully.' % (f)
            except:
                print 'ERROR reading file %s.' % (f)
                #output.writerow(x + 'n')
                pass
if __name__ == "__main__":
    extractor()

在其当前状态下,它似乎只是打印一个错误(如例外中的错误消息,而不是python返回的错误)消息,然后停止。我已经盯着它了一段时间,我不确定从这里去哪里。谁能指向正确的方向?

  1. writerow([file, title, subject])应该是 writerow([f, title, subject])

  2. 您可以使用sys.exc_info()打印错误的详细信息

    • http://docs.python.org/2/library/sys.html#sys.exc_info

您是否检查了pdffiles变量包含您认为的功能?我在列表中找到了一个列表...所以也许尝试:

for files in pdffiles:
    for f in files:
        #do stuff with f

我个人喜欢Glob。请注意,我在扩展变量中的.pdf之前添加 *:

import os
import glob
basedir = os.getcwd()
extension = '*.pdf'
pdffiles = glob.glob(os.path.join(basedir,extension)))

弄清楚了。我过去下载文件的脚本是将文件保存在文件名之后的' r n'tawing之后,直到我实际上ls'd目录才能查看到了什么,我才注意到。感谢大家的帮助。

最新更新