1. 程式人生 > 程式設計 >Python程式設計快速上手——PDF檔案操作案例分析

Python程式設計快速上手——PDF檔案操作案例分析

本文例項講述了Python PDF檔案操作。分享給大家供大家參考,具體如下:

題目如下:

  • 利用第九章的os.walk()函式編寫指令碼,遍歷資料夾中的所有pdf,用命令列提供的命令對這些PDF進行加密,用原來的檔名加上_encrypted.pdf字尾,儲存每個加密的PDF。在刪除原來的檔案之前,嘗試用程式讀取並解密該檔案,確保被正確加密
  • 然後編寫一個程式,找到資料夾中所有加密的PDF檔案,利用提供的口令,建立pdf的解密拷貝,如果口令不對,程式應該列印一條訊息,
    並繼續處理下一個pdf檔案

思路如下:

- 程式內函式1需要做以下事情:
找出資料夾中所有PDF檔案
對PDF檔案進行加密

儲存加密的PDF檔案
檢驗是否正確加密
刪除原始檔
- 程式內函式2需要做以下事情:
遍歷資料夾中所有帶_encrypted字尾的PDF檔案
利用提供的口令進行開啟
能夠正確開啟,則進行口令拷貝儲存到txt檔案
不能正確開啟輸出到螢幕
- 程式碼需要做以下事情:
匯入os,PyPDF2,sys,send2trash
生成新資料夾用於儲存加密PDF及拷貝文字

  • 編寫一個加密函式
    函式內呼叫os.walk()遍歷資料夾,檔名儲存到列表
    命令列引數sys.argv()提供加密口令
    for迴圈進行檔案加密和儲存加密檔案操作
    decrypt進行解密,確保正確加密,並進行反饋
    刪除原有檔案(send2trash)
  • 編寫一個生成解密拷貝函式
    os.walk()遍歷,decrypt進行解密,反饋結果,生成密碼拷貝txt
    try-except進行decrypt控制,解密失敗列印訊息,continue繼續

程式碼如下:

由於我的程式碼在命令列執行時提示找不到PyPDF2模組,所以sys.argv命令列引數用的字串直接放入函式進行代替。

#! python3
import os,sys,send2trash

os.makedirs(".\\NewPDF")
print("資料夾建立成功!")
path1 = os.path.abspath(".\\NewPDF")
# 檔案加密函式
def decryptFile(argv,p = os.path.abspath(".\\New")):
 tagFloder = '.\\PDF'
 pdfList = []
 #當前目錄下建立新資料夾
 #os.makedirs(".\\NewPDF")
 #遍歷目標資料夾,將.pdf檔名新增到列表
 for foldername,subfolders,filenames in os.walk(tagFloder):
  for filename in filenames:
   if filename.endswith('.pdf'):
    pdfList.append(filename)
    print('找到PDF檔案:%s' %filename)
   else:
    continue
 #對pdf檔案進行加密)
 for i in pdfList:
  pdfFile = open(os.path.join(foldername,filename),'rb')
  pdfReader = PyPDF2.PdfFileReader(pdfFile)
  pdfWriter = PyPDF2.PdfFileWriter()
  #拷貝
  for pageNum in range(pdfReader.numPages):
   pdfWriter.addPage(pdfReader.getPage(pageNum))
  newName = i[0:-4] #對檔名進行分割
  pdfWriter.encrypt(argv) #口令加密
  pdfResult = open("{0}\\{1}_encrypted.pdf".format(p,newName),"wb+") #建立新檔名物件
  pdfWriter.write(pdfResult) #寫入新檔案
  pdfReader2 = PyPDF2.PdfFileReader(pdfResult,'rb')
  #進行加密確認
  if pdfReader2.decrypt(argv):
   print("正確加密!刪除原檔案中...")
   try:
    send2trash.send2trash(os.path.join(foldername,i))
   except:
    print("刪除原檔案:%s 失敗!"%i)
  pdfResult.close()
  print("Done!")

# 口令拷貝函式
def copyDcrypt(argv,p = os.path.abspath(".\\New")):
 pdfList = []
 for foldername,filenames in os.walk("."):
  print("父資料夾:%s"%foldername)
  for filename in filenames:
   if filename.endswith(".pdf"):
    pdfReader = PyPDF2.PdfFileReader(open(os.path.join(foldername,'rb'))
    if pdfReader.isEncrypted:
     pdfList.append(filename)
     print('找到已加密PDF檔案:%s' % filename)
   else:
    continue
  for i in pdfList:
   newName = i[0:-4] #對檔名進行分割
   try:
    if pdfReader.decrypt(argv) == 1:
     copyFile = open("{0}\\{1}_PASSWORD.txt" .format(p,'w')
     copyFile.write("Password is : %s" % argv)
     copyFile.close()
     print("口令正確!拷貝生成成功!")
    else:
     print("口令錯誤!")
   except:
    continue
# 呼叫函式
decryptFile("ABCDEFG",path1) 

copyDcrypt("ABCDEFG",path1)

執行結果:

  • pycharm介面執行結果:
    在這裡插入圖片描述
    在這裡插入圖片描述
    - 原資料夾:
    在這裡插入圖片描述
    - 新資料夾:
    在這裡插入圖片描述
    - 拷貝文字檔案:
    在這裡插入圖片描述

更多Python相關內容感興趣的讀者可檢視本站專題:《Python檔案與目錄操作技巧彙總》、《Python編碼操作技巧總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。