python - 如何将日期传递给 Python 中的脚本?

标签 python date parameter-passing

我有一个用于删除早于某个日期的图像的脚本。

我可以在调用运行脚本时将此日期作为参数传递吗?

示例:此脚本 delete_images.py 删除早于某个日期 (YYYY-MM-DD) 的图像

python delete_images.py 2010-12-31

脚本(使用固定日期(xDate 变量))

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 

最佳答案

快速但粗暴的方法是使用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

使用 argparse 模块,您可以在用户输入时自动免费获得帮助消息

delete_images.py -h

如果用户未能提供正确的输入,它还会提供有用的错误消息。

您还可以轻松地为 xDate 设置默认值,将 xDate 转换为 datetime.date 对象,并且,正如他们所说在电视上,“很多很多!”。


稍后我会在您使用的脚本中看到

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

xDate 字符串转换为时间元组。您可以使用 argparse 执行此操作,因此 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)

附言。无论您选择使用什么方法(sys.argv 或 argparse),拉

都是个好主意
expDate = time.strptime(xDate, '%Y-%m-%d')

for 循环 之外。由于 xDate 的值永远不会改变,您只需计算一次 expDate

关于python - 如何将日期传递给 Python 中的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8198162/

相关文章:

python - 我需要帮助修复 __str__ 方法。不返回任何东西

c++ - 在 C++ 中将带有时区的日期时间字符串转换为 UNIX 时间戳的快速方法

Javascript 将参数传递给函数

powershell - 我应该对函数/脚本调用的所有参数使用冒号吗?

javascript - HMAC 函数 Javascript 到 python

python - Python3.4无法导入Django

PHP 生成带日期的唯一订单号

c# - 将数组参数从 C# 传递到 C++/CLI 方法

python - Pandas 分组和过滤器

swift - 在 Swift 中设置当前年份的变量