標籤:long range 建立檔案 exists 操作 imp test 程式 命令列選項
python中的命令列參數
python中有一個模組sys,sys.argv這個屬性提供了對命令列參數的訪問。命令列參數是調用某個程式時除程式名外的其他參數。
sys.argv是命令列參數的列表
len(sys.argv)是命令列參數的個數
下面我們用一個簡單的例子來說明一下。
#!/usr/bin/python#coding:utf-8import sys ##載入sys這個模組。for i in range(len(sys.argv)): print "第%d個參數是:%s" % (i,sys.argv[i])print
運行上面的指令碼:
python argv.py 1 2 3
結果如下:
第0個參數是:argv.py
第1個參數是:1
第2個參數是:2
第3個參數是:3
從上面的指令碼運行結果我們能看得出來第一個參數是指令碼名本身也就是第0個參數。其餘的一次類推。
有了這個sys.argv參數我們就可以向指令碼傳遞一些我們想要用的參數。
另一個比較常用的模組os.path可以完成對路徑的操作。它提供的函數可以完成管理和操作檔案路徑中的各個部分,擷取檔案或子目錄資訊,檔案路徑查詢操作。
下面列出一些os模組中常用的函數:
函數名: 作用:
os.mkfifo(‘path/filename‘)/os.mknod(‘path/filename‘,mode,device) 建立具名管道/建立檔案系統節點
os.remove(‘path/filename‘) 刪除檔案
os.rename(‘path/filename1‘,‘path/filename2‘)/renames() 重新命名檔案
os.stat(‘path/filename‘) 返迴文件資訊
os.symlink(‘path/filename‘,‘path/ln_filename‘) 建立符號連結
os.utime() 更新時間戳記
os.tmpfile() 建立並開啟(‘w+b‘)一個新的臨時檔案
os.walk() 產生一個分類樹下的所有檔案名稱
目錄/檔案夾
os.chdir()/fchdir() 改變當前工作目錄/通過一個檔案描述符改變當前工作目錄
chroot() 改變當前進程的根目錄
listdir() 列出指定目錄的檔案
getcwd()/getcwdu() 返回當前工作目錄/功能相同,但返回一個Unicode對象
mkdir()/makedirs() 建立目錄/建立多層目錄
rmdir()/removedirs() 刪除目錄/刪除多層目錄
訪問/許可權
access() 檢驗許可權模式
chmod() 改變許可權模式
chown()/lchown() 改變ower和group ID /功能相同,但不會跟蹤連結
umask() 設定預設許可權模式
檔案描述符操作
open() 底層的作業系統open(對於檔案,使用標準的內建open() 函數)
read()/write() 根據檔案描述符讀取/寫入資料
dup()/dup2() 複製檔案描述符號/功能相同,但是是複製到一個檔案描述符裝置號。
makedev() 從major和minor裝置號建立一個原始裝置號
major() /minor() 從原始裝置號獲得major/minor裝置號
下面是os.path模組中的路徑名訪問的一些函數
函數描述
os.path.basename() 去掉目錄路徑,返迴文件名
os.path.dirname() 去掉檔案名稱,返回目錄路徑
os.path.join() 將分離的各部分組合成一個路徑名
os.path.split() 返回(dirname(),basename())元組
os.path.splitdrive() 返回(dirvename,pathname)元組
os.path.splitext() 返回(filename,extension)元組
資訊
getatime() 返回最近訪問時間
getctime() 返迴文件建立時間
getmtime() 返回最近檔案修改時間
getsize() 返迴文件大小(以位元組為單位)
查詢
exists() 指定路徑(檔案或目錄)是否存在
isabs() 指定路徑是否為絕對路徑
isdir() 指定路徑是否存在且為一個目錄
isfile() 指定路徑是否存在且為一個檔案
islink() 指定路徑是否存在且為一個符號連結
ismount() 指定路徑是否存在且為一個掛載點
samefile() 兩個路徑名是否指向同一個檔案
本篇將介紹python中sys, getopt模組處理命令列參數
如果想對python指令碼傳參數,python中對應的argc, argv(c語言的命令列參數)是什麼呢?
需要模組:sys
參數個數:len(sys.argv)
指令碼名: sys.argv[0]
參數1: sys.argv[1]
參數2: sys.argv[2]
test.py
import sysprint "指令碼名:", sys.argv[0]for i in range(1, len(sys.argv)): print "參數", i, sys.argv[i]
>>>python test.py hello world
指令碼名:test.py
參數 1 hello
參數 2 world
python中使用命令列選項:
例如我們需要一個convert.py指令碼。它的作用是處理一個檔案,並將處理後的結果輸出到另一個檔案中。
要求該指令碼滿足以下條件:
1.通過-i -o選項來區別參數是輸入檔案還是輸出檔案.
>>> python convert.py -i inputfile -o outputfile
2.當不知道convert.py需要哪些參數時,用-h列印出協助資訊
>>> python convert.py -h
getopt函數原形:
getopt.getopt(args, options[, long_options])
convert.py
import sys, getoptopts, args = getopt.getopt(sys.argv[1:], "hi:o:")input_file=""output_file=""for op, value in opts: if op == "-i": input_file = value elif op == "-o": output_file = value elif op == "-h": usage() sys.exit()
代碼解釋:
a) sys.argv[1:]為要處理的參數列表,sys.argv[0]為指令碼名,所以用sys.argv[1:]過濾掉指令碼名。
b) "hi:o:": 當一個選項只是表示開關狀態時,即後面不帶附加參數時,在分析串中寫入選項字元。當選項後面是帶一個附加參數時,在分析串中寫入選項字元同時後面加一個":"號。所以"hi:o:"就表示"h"是一個開關選項;"i:"和"o:"則表示後面應該帶一個參數。
c) 調用getopt函數。函數返回兩個列表:opts和args。opts為分析出的格式資訊。args為不屬于格式資訊的剩餘的命令列參數。opts是一個兩元組的列表。每個元素為:(選項串,附加參數)。如果沒有附加參數則為空白串‘‘。
getopt函數的第三個參數[, long_options]為可選的長選項參數,上面例子中的都為短選項(如-i -o)
長選項格式舉例:
--version
--file=error.txt
讓一個指令碼同時支援短選項和長選項
getopt.getopt(sys.argv[1:], "hi:o:", ["version", "file="])
python中命令列參數