PDF檔案自動重新命名

vetains發表於2018-01-25

背景:從學術網站上下載的論文的PDF檔案一般都是以類似亂碼的形式命名,下載的論文量變大後逐個重新命名後是個繁重耗時的工作。但論文的PDF檔案其實屬性裡都有著自己的論文題目,可以利用這一點來完成對論文題目的重新命名。


程式碼

#-*- coding:utf-8 -*-
import os 
import pyPdf
import wx
import sys

class Rename_Frame(wx.Frame):
    def __init__(self):  
        wx.Frame.__init__(self,None,-1,u'PDF File Rename',size=(400,350))
        panel=wx.Panel(self,-1)  
        
        self.Text1=wx.StaticText(panel,label=u'Folder address ',pos=(13,80),size=(100,60))
        self.TextCtrl1=wx.TextCtrl(panel,pos=(107,80),size=(250,25))  
        
        self.Button1=wx.Button(panel,-1,u'START',pos=(90,200),size=(100,50))   
        self.Bind(wx.EVT_BUTTON,self.begin_click,self.Button1)

        self.Button2=wx.Button(panel,-1,u'CANCEL',pos=(205,200),size=(100,50))
        self.Bind(wx.EVT_BUTTON,self.cancel_click,self.Button2)

    
    
    def begin_click(self,event):
        folder_address = self.TextCtrl1.GetValue()
        for file_name in os.listdir(folder_address):
            if file_name.lower()[-3:] == 'pdf':
                target_pdf = file(file_name,'rb')
                try:
                    pdf_title = pyPdf.PdfFileReader(target_pdf).getDocumentInfo().title+'.pdf'
                except:
                    pdf_title = '0_'+file_name
        
                target_pdf.close()
        
                try:
                    os.rename(file_name,pdf_title)
                except:
                    pass
        self.Destroy()
        sys.exit()
                
    
    def cancel_click(self,event):
        self.Destroy()
        sys.exit()
        
def main():
    app = wx.App()
    win = Rename_Frame()
    
    win.Show()
    app.MainLoop()
    
if __name__ == '__main__':
    main()

上面的程式碼寫了一個小型的帶有簡單GUI的程式,關鍵的部分在於:

folder_address = self.TextCtrl1.GetValue()
        for file_name in os.listdir(folder_address):
            if file_name.lower()[-3:] == 'pdf':
                target_pdf = file(file_name,'rb')
                try:
                    pdf_title = pyPdf.PdfFileReader(target_pdf).getDocumentInfo().title+'.pdf'
                except:
                    pdf_title = '0_'+file_name
        
                target_pdf.close()
        
                try:
                    os.rename(file_name,pdf_title)
                except:
                    pass
從文字輸入框獲得資料夾地址後,遍歷資料夾名下的所有檔案,凡是以'pdf'結尾的檔案都會被pyPdf模組的pyPdf.PdfFileReader().title來獲取PDF的title屬性,然後利用os.rename(old_name,new_name)函式進行重新命名。

但有些PDF檔案是帶有加密的,這使得PDF的屬性並不能用上述方法獲取,所以就用'0_'+file_name的方法重新命名原檔案將其置頂(否則在一大堆檔案裡找出沒有重新命名的檔案太麻煩了),然後再手動重新命名。


以上。

相關文章