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,如需轉載請自行聯系原作者