编写具有特定范围的字符串元组(Python)

时间:2013-10-17 15:10:52

标签: python python-3.x

任何人都可以帮我写出正确的代码。 我正在尝试创建一个字符串元组,其中包含Microsoft Excel支持的日期范围中的日期,例如(“2013-Oct-17”,“2100-01-01”)。

我的代码:

import time
import math


DAYS = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
FULL_MONTHS = ("January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December")


mm_ = tuple(str(date) for date in range(2013-oct-17, 2100-01-01))
print mm_

运行它(输出)时出现以下错误:

mm_ = tuple(str(date) for date in range(2013-oct-17, 2100-01-01))
TypeError: unsupported operand type(s) for -: 'int' and 'builtin_function_or_method'

2 个答案:

答案 0 :(得分:0)

使用第三方库dateutil识别不同类型的日期字符串和内置模块datetime。如果不想使用dateutil,可以使用datetime.datetime.strptime尝试所有可能的格式,并使用有效的格式。如果想要在范围中包含结束日期,可以删除-timedelta(days=1)

from datetime import timedelta
from dateutil.parser import parse
from dateutil.rrule import rrule, DAILY

dates = tuple(str(dt.date()) for dt in rrule(DAILY, dtstart=parse("2013-oct-17"), until=parse("2100-01-01")-timedelta(days=1)))
print dates

更新:Jon Clements小狗在评论dateutil.rrule.rrule中说过,更新了代码以利用它。多亏了他,它现在是一个整洁的四线。

答案 1 :(得分:0)

有很多图书馆可以帮助您解决这个问题。我发现最有用的是熊猫。这是一个演示如何解决问题的片段:

In [481]: import pandas as pd

In [482]: dates = pd.date_range('2013-10-17', '2100-01-01')

In [483]: mm_ = tuple(date.strftime('%Y-%m-%d') for date in dates)

In [484]: mm_[:5]
Out[484]: ('2013-10-17', '2013-10-18', '2013-10-19', '2013-10-20', '2013-10-21')

如评论中所述,您必须输入日期作为字符串。如果您希望以长格式显示日期和月份,可以使用:

In [486]: nn_ = tuple(date.strftime('%A %B %d, %Y') for date in dates)

In [487]: nn_[:5]
Out[487]: 
('Thursday October 17, 2013',
'Friday October 18, 2013',
'Saturday October 19, 2013',
'Sunday October 20, 2013',
'Monday October 21, 2013')

请参阅http://docs.python.org/2/library/datetime.html的底部,了解哪些字符代码指的是哪种日期格式。