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 - 決定開始一個陌生學科學習前你需要想的事

TAG:Python入門 | 學習 | 自動化 |