python 系統操作模塊——從新建文件夾開始
在日常的工作中,我們常常需要對文件進行一些操作,比如新建文件夾,將文件複製到另外一個文件夾中。對於程序員來說,在linux上,新建文件夾,git pull一個代碼倉,或者批量的複製文件,這些都是重複和繁瑣的工作。
最近,工作中,由於主線代碼再不斷的更新,所以需要本地時不時的要去同步主線,命令雖然不是很多,但是,有時候操作幾個主線倉庫,盯著當前進展,實在是一件費時又鬧心的事情。仔細想想這些事情,都是一些重複的操作,既然是重複的操作,那麼就闊以自動化進行操作。
於是最近寫了個腳本,闊以一鍵創建目錄,並且下載代碼。 後面我將繼續將,如何讓腳本,定時進行操作。
這裡用到了python的os模塊。該模塊可以操作系統命令,並且適配windows和Linux。
os.system(『mkdir hello』)
則可以創建一個hello的文件夾。 但是當程序運行到:os.system(『cd hello』)
時候,雖然執行了該條命令,但是當前系統並沒有切換到hello的目錄下。我試著在python的命令行模式下操作:
>>os.system(pwd)
>>./opt/code>>os.system(cd hello)
>>0>>os.system(pwd)>>./opt/code可以看到,os.system(『cd hello』)並沒有改變當前的文件目錄。
查找資料發現,原來在python中和os.system實現機制有關係。
Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations.
也就是說:
- 父進程的環境變數(environment variables)會默認傳遞到子進程中(工作目錄PWD就是環境變數之一) - 使用system函數,子進程無法影響父進程中的環境變數其實簡單點說,就是os.system()的每一次操作都是開啟一個子進程,操作完成後,會返回父進程,但是無法改變父進程的環境變數。
解決的辦法有兩種:
1,是使用os提供的os.chdir(『hello』) 2, 是使用複合語句或者多個語句 os.system(『cd hello && ls』) 或者 os.system(『cd hello』;』ls』)>>> os.chdir(Downloads)>>> os.system(pwd)/Users/Downloads0>>>
或者
>>> os.system(cd Downloads && ls)1435388642.jpg1968357119.jpg20170304.xls2017突然20歲泰國版HD720P泰語中字.mp42017殺破狼·貪狼HD國語1080P.mp42017猩球崛起3:終極之戰HD720P美版中字.mp4
建立一個文件夾,首先要設置好一個名字,我們可以想想這個名字最好是不斷變化的,不然,腳本運行的第二次,就會因為文件名衝突而報錯。
所以想到可以使用時間戳作文件名的一部分。
from datetime import datetimenow_time = datetime.now()
now_time 存貯著當前的系統時間,但是它並不能夠直接作為文件名,因為它現在並不是一個字元串格式。
所以下一步是要把它轉換成字元串,這樣作為文件夾名字,就會根據當前的時間來命名。
轉換成字元串可以使用strftime()方法,該方法還闊以指定輸出的格式。
>>> now_time.strftime(%m%d%H%M)10272034
這樣我們就獲得了一個動態變化的文件名,當你每次操作的時候,它都會根據當前時間取一個文件名。
具體你想用什麼樣的命令,就看自己的需求了。
編程就是如此,你想有什麼要的效果,提出自己的需求,然後尋找適合的方法。一步步驗證,
在初期一個好的方法就是在命令交互模式下,驗證好自己的命令,然後在把它們固化到腳本中。
推薦閱讀:
※推薦給你的2個好工具和一個小技巧
※你找到適合自己的讀書方法了嗎?
※哪些日語書籍比較適合日語初學者自學?
※如何在沒有靈感的情況下,寫出好故事
※沈書涵的學習日誌#week2 - 決定開始一個陌生學科學習前你需要想的事