
Python是一門“優雅”的計算機語言,而且就算10歲的小朋友也能學會,我一直向我身邊的同學朋友同事推薦,不管他會不會編程。
這一回我需要完成的任務是把“照片”目錄下面的數百個以“數字+中文姓名.jpg”的文件批量重命名,我需要把“數字”刪除,保留“中文姓名.jpg”,手工改名將是一件繁瑣無趣的事。很自然我想到了我一直很喜歡的Python,當然,在這里除了Python還可以用Perl、Ruby、PHP、DOS Batch、VBS,如果你願意還可以用C++、Java,不過我肯定不願意。如果你沒有聽說過這些看似很高深的術語,也沒有關系,忘了他們吧,我們只要來看看Python就可以了。
Python的安裝我就不介紹了,請大家百度:Python,注意我現在使用的是2.7.x的版本,請大家不要安裝3.x的版本(暫時不解釋)。
我是這樣操作的:
1、先把“照片”目錄打開。
2、在“資源管理器”的空白處右擊,彈出菜單,“新建”-〉“文本文檔”。
3、將新建的文本文檔“新建文本文檔.txt”(如果沒有".txt"請百度:顯示文件擴展名)重命名(快捷鍵F2)為“rename.py”,彈出更改文件擴展名的提醒,確認。
4、右鍵選擇編輯“rename.py”,輸入並保存以下內容:
import os, re for item in os.listdir('.'): if (re.match(r"^\d+", item)): print item newname = re.sub(r"(\d+)", "", item) os.rename(item, newname) print "-->" + newname
你現在看不懂也沒關系,后面我會解釋給你聽。
5、按住鍵盤上的Shift鍵的同時在“資源管理器”空白處右擊,選擇“在此處打開命令窗口”。
6、在彈出的黑窗口中輸入:python rename.py,然后回車。
7、在窗口中會顯示更名的過程,稍等片刻,任務完成。
好的,我們現在來仔細看看這幾句話(專業點就是這幾行代碼)都干了些什么:
Line 1:
import os, re
這一行表明我們這次批量重命名需要用到兩個工具(專業一點叫模塊):系統(operating system)、正則(regular expression)。
系統工具可以用來操作文件和目錄,包括我在代碼里面的取文件名和重命名的功能;而正則(表達式)則有點復雜,簡單說,正則就是按照某一種模式來處理文本的一種工具。
我們在這里把 os, re 導入(import)到我們的代碼里面,這樣我們就可以在后面使用這兩個工具的功能了。
Line 2:
我們在這里空一行,這並不是必須的,但是這樣比較美觀。
Line 3:
for item in os.listdir('.'):
doSomething...
這句話的意思是說,我們下面將對這個代碼文件所在的目錄(也就是"."目錄,系統里面".."表示上一級目錄,"."表示本級目錄)下面的每一個文件處理一遍。os.listdir('.')能夠把本級目錄下面的所有文件名列出來,然后在for語句的幫助下,一次又一次的把名字交給變量item,直到所有名字都處理了一遍。
下面我舉一個栗子,大家就明白for的用法了:
for 小屁孩 in 我的房間的小屁孩們: 打一頓(小屁孩)
這句話的意思就是把在我房間的每一個小屁孩都打一頓。但是這樣未免太暴力了,我們改一下:
for 小屁孩 in 我的房間的小屁孩們: if 小屁孩 is 熊孩子: 打一頓(小屁孩)
這里的意思就很清楚了,檢查一下我房間里的每一小屁孩是不是熊孩子,如果是熊孩子就打一頓。
for 和 if 的用法就像上面那樣,只是記得后面要跟一個冒號(:),然后在 for 或者 if 后面的代碼需要縮進4個空格,這樣python才知道哪些內容是for需要迭代(迭代就是一種循環)的。
Line 4:
if (re.match(r"^\d+",item)):
doSomething...
有了剛才的說明,這句話就很明顯了,如果滿足某項條件,我們就做某事。但是這里的條件是神馬呢?不用急,我慢慢告訴你。
這里就用到了我們re工具的match功能,也就是比較一個文本和某一個模式是否匹配,用法是"re.match(模式, 文本)",如果匹配返回“真(True)”,不匹配返回“假(False)”。
r"^\d+" 的意義我簡要說明一下:
1、'r'的意思表示Raw(原始),意思是后面跟的那一串字符是啥樣就是啥樣(不進行轉義),這里為的是簡化我們表達式,因為反斜杠“\"有特殊的意義(用來構成轉義字符,"\n"表示換行,"\t"表示制表符,"\\"表示'\'本身),如果沒有'r',我們需要寫成"^(\\d+)"。
2、"^\d+"是正則表達式的寫法,意思是開頭是一串數字的文本。“^”表示文本的開頭,“\d”表示一個數字,“\d+”表示一個以上數字。"^\d+"就表示文本開頭就緊接着一個以上數字的模式。
Line 5:
print item
在屏幕上輸出當前的文件名。
Line 6:
newname = re.sub(r"(\d+)", "", item)
這一句就涉及到了re工具的另一個功能——替換(substitute),用法“re.sub(模式, 替換成的文本, 原文本)”。在這里就是把item里面的數字((\d+)),替換成空(""),也就相當於把數字刪除了,然后把新的文本賦值給newname這個變量。
Line 7:
os.rename(item,newname)
這一句用到了os工具的rename,也就是重命名功能,用法“os.rename(原文件名, 新文件名)”,這一步真正實現了更名的過程。
Line 8:
print "-->" + newname
最后一步,作為提示,我們在屏幕上輸出更改以后的文件名。
到這里,我們的代碼就結束了,其實並不是太復雜,只要你有操作Word的能力,相信你也能掌握的。我這篇文章不指望你馬上就能學會Python,只是希望你能夠直面Python,然后發現她的美,用她來幫你以后的工作和學習。目前的時代,編程應該是一個受過教育的人的基本素養,和以前的寫作一樣,你成不了作家,但是也需要為工作和生活掌握寫作的能力,而現在,編程幾乎是你的科研和工作最有力的工具,而Python又是一門非常易學易用,而且強大的語言,希望你們能夠喜歡上她。
這里是Python的一些資料,大家可以根據這些去學習:
《Head First Python(中文版)》亞馬遜 笨辦法學 Python(HTML版)
如果有任何疑問歡迎留言,我會盡力解答!
2013-09-09
