Python為Skydrive打包下載的檔案恢複原檔案名稱

來源:互聯網
上載者:User

下載Skydrive上的檔案夾的話,所有檔案會打包成一個zip壓縮包。不過解壓這個壓縮包以後,發現所有中文名稱的檔案都被重新命名成了類似File1.txt這樣的格式,同時會多出來一個檔案,名為“Encoding Error.txt”。這個檔案說明了下載的檔案被重新命名是Skydrive伺服器為之,檔案前三行是:

Due to the limitations of the supported zip file format, the following file(s) had to be renamed.Original File Name -> New File Name

後面每一行都是按照第三行的格式來說明所有被重新命名的檔案在重名前後的名字,比如“某檔案.pdf -> File1.pdf”。值得慶幸的是檔案拓展名沒有被修改。顯然,這些檔案被重名名後很不方便使用,最好還是恢複本來的名字。手工修改的話就枉費了學了這麼多門的程式設計語言,這種機械重複性的工作當然要用代碼來做,比如Python。Skydrive不能處理掉中文檔案名稱問題,實在是對不起Microsoft這塊招牌,所幸它還是給出了“Encoding Error.txt”這個檔案。

完成檔案名稱恢複的基本思路是,首先從Encoding Error.txt裡面讀取檔案重新命名前後的檔案名稱,然後逐一修改。涉及的內容也不多,一個是檔案的開啟和讀取(針對的是Encoding Error.txt),用內建函數open和檔案對象的readlines方法就可以了,當然這之後要對讀取的字串進行處理,最簡單的做法就是split了,因為Encoding Error.txt檔案每行的格式是比較簡單的;另一個是檔案操作,可以用os模組中的一些函數或方法,比如可以用os.path下的一些方法,不過我用的是os.system,也就是調用系統命令,在Windows平台下的做法是“rename oldname.extension newname.extension”。沒有用Python os模組提供的其他更直接的重名名的方法,好處是不用考慮諸如異常處理的問題,壞處就是,只能在Windows上運行。

按照這個思路,應該是可以把工作的Python代碼給寫出來,但實際上要處理其他意料之外的問題,主要指的是檔案編碼問題。“Encoding Error.txt”的文檔編碼是utf-8+bom,使用open和readlines,讀到的內容中文不能正確顯示,需要decode一下。讀取的每一行字串需要特別處理分行符號“\r\n”,直接replace成Null 字元即可,當然這和split的做法有關,可能不是必須的。使用os.system執行Windows命令實際上應該是執行了cmd /k command的操作,也就是運行bat命令,需要轉換成Windows命令列支援的輸入格式,需要encode一下。

說了這麼多,代碼如下:

# -*- coding: utf-8 -*- import osenc = open("Encoding Errors.txt","r").readlines()for i in range(len(enc)):if i < 3:continueenc[i] = enc[i].replace('\n','').replace('\r','')enc[i] = enc[i].decode("utf-8",'ignore')l = enc[i].split("->")command = "rename %s %s" % (l[1],l[0])print command.encode("cp936")if  os.system(command.encode("cp936")) == 0 :print'Done!'

代碼雖短,但是完全修改讓其工作,倒是費了一些時間,主要精力還是花在編碼的問題上,中文程式員無法迴避的一個問題啊。現在遇到這方面的問題越來越多了,有必要系統學習一下。 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.