2011-11-19 60 views
4

我有一個腳本用於刪除比日期更早的圖像。如何將日期傳遞給Python中的腳本?

當我打電話來運行腳本時,是否可以將此日期作爲參數傳遞?

示例:此腳本delete_images.py刪除舊的圖像不是日期(YYYY-MM-DD)

python delete_images.py 2010-12-31 

腳本

import os, glob, time 

root = '/home/master/files/' # one specific folder 
#root = 'D:\\Vacation\\*'   # or all the subfolders too 
# expiration date in the format YYYY-MM-DD 

### I have to pass the date from the script ### 
xDate = '2010-12-31' 

print '-'*50 
for folder in glob.glob(root): 
    print folder 
    # here .jpg image files, but could be .txt files or whatever 
    for image in glob.glob(folder + '/*.jpg'): 
     # retrieves the stats for the current jpeg image file 
     # the tuple element at index 8 is the last-modified-date 
     stats = os.stat(image) 
     # put the two dates into matching format  
     lastmodDate = time.localtime(stats[8]) 
     expDate = time.strptime(xDate, '%Y-%m-%d') 
     print image, time.strftime("%m/%d/%y", lastmodDate) 
     # check if image-last-modified-date is outdated 
     if expDate > lastmodDate: 
      try: 
       print 'Removing', image, time.strftime("(older than %m/%d/%y)", expDate) 
       os.remove(image) # commented out for testing 
      except OSError: 
       print 'Could not remove', image 

回答

16

快速(有一個固定的日期(xDate變量)的作品)但粗略的方法是使用sys.argv

import sys 
xDate = sys.argv[1] 

更健壯的,可擴展的方式是使用argparse模塊:

import argparse 

parser=argparse.ArgumentParser() 
parser.add_argument('xDate') 
args=parser.parse_args() 

然後訪問你會使用args.xDate,而不是xDate用戶提供價值。

使用​​模塊即可自動幫助信息免費當用戶鍵入

delete_images.py -h 

如果用戶未能提供適當的投入也給出了一個有用的錯誤消息。

您還可以輕鬆設置xDate的默認值,將xDate轉換爲datetime.date對象,並且正如他們在電視上所說的那樣,「更多,更多!」。


我在後面看到你的腳本使用

expDate = time.strptime(xDate, '%Y-%m-%d') 

xDate字符串轉換成時間的元組。你可以用​​這樣做,所以args.xDate自動成爲一個時間元組。例如,

import argparse 
import time 

def mkdate(datestr): 
    return time.strptime(datestr, '%Y-%m-%d') 
parser=argparse.ArgumentParser() 
parser.add_argument('xDate',type=mkdate) 
args=parser.parse_args() 
print(args.xDate) 

當像這樣運行:

% test.py 2000-1-1 

產生

time.struct_time(tm_year=2000, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=1, tm_isdst=-1) 

PS。無論採用哪種方式,你選擇使用(sys.argv中或argparse),這將是一個好主意,拉

expDate = time.strptime(xDate, '%Y-%m-%d') 

for-loop的。由於xDate的值永遠不會改變,因此只需要計算expDate一次。

2

命令行選項可以通過列表sys.argv訪問。所以你可以簡單地使用

xDate = sys.argv[1] 

sys.argv[0]是當前腳本的名字。)

1

點點潤色unutbu的回答是:

import argparse 
import time 

def mkdate(datestr): 
    try: 
    return time.strptime(datestr, '%Y-%m-%d') 
    except ValueError: 
    raise argparse.ArgumentTypeError(datestr + ' is not a proper date string') 

parser=argparse.ArgumentParser() 
parser.add_argument('xDate',type=mkdate) 
args=parser.parse_args() 
print(args.xDate) 
相關問題