天天看點

Python學習筆記四(Python OS子產品)

Python os子產品提供了一個統一的作業系統接口函數,通過python os子產品可以實作對系統本身的指令,檔案,目錄進行操作,官方參考文檔( http://docs.python.org/library/os)。

1)os.sep 可以取代作業系統特定的路徑分割符(在Linux、Unix下它是'/',在Windows下它是'\\',而在Mac OS下它是':')。

1

2

3

4

5

<code>os.sep</code>

<code>'/ ’    #在Linux傳回的是'</code><code>/</code><code>'</code>

<code>mysqldir </code><code>=</code> <code>os.sep </code><code>+</code> <code>'data'</code> <code>+</code> <code>os.sep </code><code>+</code> <code>'mysql'</code> <code>+</code> <code>os.sep </code><code>+</code> <code>'3306'</code>    <code>#定義mysql資料存放目錄</code>

<code>mysqldir</code>

<code>'/data/mysql/3306'</code>

2)傳回path絕對路徑。

<code>os.path.abspath(</code><code>'iplist.txt'</code><code>)</code>

<code>'/root/sh/py/iplist.txt'</code>

3)将path分割成目錄和檔案名二進制組傳回。

<code>mysqldir</code><code>=</code><code>'/data/mysql/3306/mysql.sock'</code>

<code>os.path.split(mysqldir)</code>

<code>(</code><code>'/data/mysql/3306'</code><code>, </code><code>'mysql.sock'</code><code>)</code>

4)傳回path的目錄,其實就是os.path.split(mysqldir)第一個元素。

<code>os.path.dirname(mysqldir)</code>

5)傳回path最後檔案名,即os.path.split(mysqldir)第二個元素。

<code>os.path.basename(mysqldir)</code>

<code>'mysql.sock'</code>

6)如果path存在,傳回True,如果path不存在,傳回False。

<code>os.path.exists(mysqldir)</code>

<code>True</code>

<code>os.path.exists(</code><code>'/data/mysql/3308/mysql.sock'</code><code>)</code>

<code>False</code>

7)如果path是絕對路徑,傳回True,否則傳回False。

<code>os.path.isabs(mysqldir)</code>

<code>os.path.isabs(</code><code>'sfzhang.txt'</code><code>)</code>

8)如果path是一個存在的檔案,傳回True,否則傳回False。

<code>os.path.isfile(</code><code>'/root/sh/iplist.txt'</code><code>)</code>

<code>os.path.isfile(</code><code>'/root/sh/'</code><code>)</code>

9)如果path是一個存在的目錄,傳回True,否則傳回False。

<code>os.path.isdir(</code><code>'/root/sh'</code><code>)</code>

<code>os.path.isdir(</code><code>'/root/sh/sh'</code><code>)</code>

10)傳回指定目錄下的所有檔案和目錄名。

<code>os.listdir(</code><code>'/root/sh/py'</code><code>)</code>

<code>[</code><code>'send_email.py'</code><code>, </code><code>'1.py'</code><code>, </code><code>'mymodule.pyc'</code><code>, </code><code>'mail.py'</code><code>, </code><code>'geturl.py'</code><code>, </code><code>'using_name.py'</code><code>]</code>

11)連接配接目錄與檔案名

<code>os.path.join(</code><code>'/data/mysql/3306'</code><code>,</code><code>'mysql.sock'</code><code>)</code>

<code>'/data/mysql/3306/mysql.sock'</code>

12)建立一個目錄Create a directory。

6

<code>os.mkdir(</code><code>'py'</code><code>)    </code><code>#建立單個目錄</code>

<code>os.path.isdir(</code><code>'py'</code><code>)     </code><code>#判斷是否建立成功</code>

<code>os.makedirs(</code><code>'aa/bb/cc'</code><code>)    </code><code>#建立多級目錄</code>

<code>os.path.isdir(</code><code>'aa/bb/cc'</code><code>)    </code><code>#判斷是否建立成功</code>

13)删除目錄。

<code>os.rmdir(</code><code>'py'</code><code>)    </code><code>#删除單個目錄</code>

<code>os.removedirs(</code><code>'aa/bb/cc'</code><code>)    </code><code>#删除多級目錄</code>

14)删除檔案。

<code>os.remove(</code><code>'sfzhang.txt'</code><code>)</code>

15)切換目錄 Change the current working directory to the specified path. 

<code>os.chdir(</code><code>'/usr/local'</code><code>)</code>

<code>os.path.abspath(</code><code>'.'</code><code>)   </code><code>#檢視是否切換成功</code>

<code>'/usr/local'</code>

16)使用的作業系統的平台,比如對于Windows,它是'nt',而對于Linux/Unix使用者,它是'posix'。

<code>os.name</code>

<code>'posix'</code>

17)傳回目前Python腳本工作的目錄路徑。

<code>os.getcwd()</code>

<code>'/root/sh/py'</code>

18)運作Linu型系統指令。

<code>os.system(</code><code>'df -h'</code><code>)</code>

<code>檔案系統              容量  已用 可用 已用</code><code>%</code> <code>挂載點</code>

<code>/</code><code>dev</code><code>/</code><code>sda2             </code><code>9.7G</code>  <code>8.9G</code>  <code>335M</code>  <code>97</code><code>%</code> <code>/</code>

<code>/</code><code>dev</code><code>/</code><code>sda5              </code><code>28G</code>   <code>12G</code>   <code>16G</code>  <code>44</code><code>%</code> <code>/</code><code>data</code>

<code>/</code><code>dev</code><code>/</code><code>sda1              </code><code>99M</code>   <code>18M</code>   <code>76M</code>  <code>19</code><code>%</code> <code>/</code><code>boot</code>

<code>tmpfs                 </code><code>249M</code>     <code>0</code>  <code>249M</code>   <code>0</code><code>%</code> <code>/</code><code>dev</code><code>/</code><code>shm</code>

19)傳回目前系統的登陸使用者。

<code>os.getlogin()</code>

<code>'root'</code>

20)目錄周遊,該函數傳回一個元組,該元組有3個元素,分别表示每次周遊的路徑名,目錄清單和檔案清單。

<code>for</code> <code>i </code><code>in</code> <code>os.walk(</code><code>'/tmp/test'</code><code>):</code>

<code>...     </code><code>print</code> <code>i</code>

<code>...</code>

<code>(</code><code>'/tmp/test'</code><code>, [</code><code>'jpg'</code><code>], [</code><code>'file3'</code><code>, </code><code>'file1'</code><code>, </code><code>'file2'</code><code>])</code>

<code>(</code><code>'/tmp/test/jpg'</code><code>, [], [</code><code>'3.jpg'</code><code>, </code><code>'2.jpg'</code><code>, </code><code>'1.jpg'</code><code>])</code>

上面是我總結的OS子產品中常用的方法,利用這些方法可以編寫簡單的python腳本,在利用Linux計劃任務可以完成自動化管理系統的目的。下面是參照python簡明教程上面的一個腳本修改而來的備份目錄或者檔案的腳本。

7

8

9

10

11

12

13

14

15

16

17

18

19

<code>#!/usr/local/bin/python</code>

<code>#sfzhang 20130619</code>

<code>import</code> <code>os</code>

<code>import</code> <code>time    </code><code>#導入os和time子產品</code>

<code>file</code> <code>=</code> <code>[</code><code>'/root/.ssh'</code><code>,</code><code>'/tmp'</code><code>]   </code><code>#備份目錄或者檔案以list的形式指定</code>

<code>backup_dir </code><code>=</code> <code>'/mnt/backup/'</code>    <code>#備份檔案存放目錄</code>

<code>date </code><code>=</code> <code>time.strftime(</code><code>'%Y%m%d'</code><code>)    </code><code>#備份檔案時間戳(年月日)</code>

<code>target </code><code>=</code> <code>backup_dir </code><code>+</code> <code>'backfile'</code> <code>+</code> <code>date  </code><code>+</code> <code>'.tar.gz'</code>    <code>#備份檔案完成路徑和檔案名</code>

<code>if</code> <code>os.getlogin() !</code><code>=</code> <code>'root'</code><code>:     </code><code>#非root使用者不能執行該腳本,</code>

<code>    </code><code>print</code> <code>'Must root to run this python script!'</code>

<code>    </code><code>exit ()</code>

<code>if</code> <code>not</code> <code>os.path.exists(backup_dir):   </code><code>#判斷備份目錄是否存在,如果不存在,則建立</code>

<code>    </code><code>os.mkdir(backup_dir)</code>

<code>    </code><code>print</code> <code>'Successfully created directory'</code><code>,backup_dir</code>

<code>tar_command </code><code>=</code> <code>"tar -czvf '%s' %s"</code> <code>%</code> <code>(target,</code><code>' '</code><code>.join(</code><code>file</code><code>))  </code><code>#采用tar形式備份</code>

<code>if</code>  <code>os.system(tar_command) </code><code>=</code><code>=</code> <code>0</code><code>:    </code><code>#備份成功或失敗提示資訊</code>

<code>    </code><code>print</code> <code>'Successful backup to'</code><code>,target</code>

<code>else</code><code>:</code>

<code>    </code><code>print</code> <code>'Backup FAILED'</code>

本文轉自 sfzhang 51CTO部落格,原文連結:http://blog.51cto.com/sfzhang88/1224879,如需轉載請自行聯系原作者