2014-01-23 3 views
-1

직장에서 작업을 쉽게하기 위해 PDF 메타 데이터를 읽는 스크립트를 작성했습니다. 현재 작업 버전은 장기적으로 매우 사용할 수 없습니다 : 현재PDF 메타 데이터를 읽고 CSV에 쓰는 스크립트

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() 

현재 상태로는 (오류 예외의 메시지가 아닌 파이썬에 의해 반환 된 오류와 같이) 메시지 다음 중지 단 하나의 오류를 인쇄 것으로 보인다. 나는 잠시 동안 그것을 꼼짝 않고 바라 보았다. 그리고 나는 정말로 여기에서 어디로 가야하는지 모른다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?

+0

두 번째 예제에서 오타가 아닌지 정확히 알 수는 있지만 마지막 줄은 올바르게 들여 쓰여지지 않습니다. – ely

답변

1

알아 냈습니다. 파일을 다운로드 할 때 사용한 스크립트는 '\ r \ n'파일 이름 뒤에 파일을 저장하는 것이 었습니다. 파일 이름 뒤에 실제로 알 때까지 알지 못했던 내용이었습니다. ls 디렉토리가 무엇인지 알 수있었습니다. 모든 사람의 도움에 감사드립니다.

1
  1. writerow([file, title, subject])해야 writerow([f, title, subject])

  2. 당신은

+0

그것을 알아 냈습니다. 스크립트는 파일 이름 다음에 '\ r \ n'이있는 파일을 저장하고 있었는데 실제로 디렉토리를 찾을 때까지 알지 못했습니다. 당신의 도움을 주셔서 감사합니다. – asdoylejr

1

당신이 pdffil을 확인 했 당신의 오류의 세부 사항을 인쇄 할 sys.exc_info()을 사용할 수 있습니다 변수는 당신이 생각하는 것을 포함하고 있습니까? 목록에있는 목록을 얻고있었습니다. 아마도 시도해 보시기 바랍니다.

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))) 
관련 문제