希望提高我的python和编码技能。我有一个函数,可以为时间添加一个特定的时间段。 我通过:
1M, 7D, 6M, 2H, M
等。。并返回值。我觉得我在重复我自己。有没有比这更像Python的方法?你知道吗
def add_timeframe(time, timeframe):
if 'H' in timeframe:
┆ try:
┆ ┆ period = int(re.sub('\D', '', timeframe))
┆ ┆ return convert_datetime(time + datetime.timedelta(hours=period))
┆ except ValueError:
┆ ┆ return convert_datetime(time + datetime.timedelta(hours=1))
if 'D' in timeframe:
┆ try:
┆ ┆ period = int(re.sub('\D', '', timeframe))
┆ ┆ return convert_datetime(time + datetime.timedelta(days=period))
┆ except ValueError:
┆ ┆ return convert_datetime(time + datetime.timedelta(days=1))
if 'W' in timeframe:
┆ try:
┆ ┆ period = int(re.sub('\D', '', timeframe))
┆ ┆ return convert_datetime(time + datetime.timedelta(weeks=period))
┆ except ValueError:
┆ ┆ return convert_datetime(time + datetime.timedelta(weeks=period))
if 'M' in timeframe:
┆ try:
┆ ┆ period = int(re.sub('\D', '', timeframe))
┆ ┆ return convert_datetime(time + datetime.timedelta(days=365/12*period))
┆ except ValueError:
┆ ┆ return convert_datetime(time + datetime.timedelta(days=365/12))
我通常用字典来避免很多“如果”。我将每个条件映射到字典并执行。这是我的第一张照片:
我创建了一个用于添加月份的函数,因为timedelta没有它。然后使用
re
将数字和字母作为元组。所以“4M”应该是('4','M')。然后我将M映射为月加法,因此4*(add months函数),W表示add weeks等如果我们期待不干净的数据,我们需要创建一个数据准备功能,将确保我们的数据是在一个格式,我们希望digitsletter(s)。因为如果我们只收到字母数据,我们的代码就会失败。如果我们只有一个字母,我们可以添加1,而不是try catch。这将是我的第二步:
在数据准备功能中,您将处理所有可能的不干净:)
您可以使用
re
在一次go中提取数字部分和所有句点字符。。你知道吗然后您可以使用
convert_datetime(..)
和您在原始代码中正在做的其他东西。你知道吗PS:我会执行更多的错误检查上面的代码只是建议一个稍微更python的方式做同样的事情。你知道吗
相关问题 更多 >
编程相关推荐