Python Rrule-reading';频率'';间隔';,etc价值观?
如何从Rrule中提取“频率”、“间隔”等值Python Rrule-reading';频率'';间隔';,etc价值观?,python,python-dateutil,rrule,Python,Python Dateutil,Rrule,如何从Rrule中提取“频率”、“间隔”等值 from dateutil.rrule import * my_rrule = rrule(freq=DAILY, interval=2, count=3) print(str(my_rrule)) print(my_rrule.count()) print(my_rrule.interval()) > DTSTART:20190130T025306 RRULE:FREQ=每日;间隔=2;计数=3 3. 回溯(最近一次呼叫最后一次): 文件“/h
from dateutil.rrule import *
my_rrule = rrule(freq=DAILY, interval=2, count=3)
print(str(my_rrule))
print(my_rrule.count())
print(my_rrule.interval())
>
DTSTART:20190130T025306
RRULE:FREQ=每日;间隔=2;计数=3
3.
回溯(最近一次呼叫最后一次):
文件“/home/pi/test2.py”,第6行,在
打印(my_rrule.interval())
AttributeError:“rrule”对象没有属性“interval”
>>>
此方法读取“计数”属性值,但因“间隔”、“频率”等而中断。更改代码
print(my_rrule.interval())
到
您可以从rrule的init函数中得到一个线索,它将interval存储为类中的_interval,这意味着您最好不要尝试从外部使用此变量,因为实例可能会通过更改其值或其逻辑依赖于此而产生副作用
def __init__(self, freq, dtstart=None,
interval=1, wkst=None, count=None, until=None, bysetpos=None,
bymonth=None, bymonthday=None, byyearday=None, byeaster=None,
byweekno=None, byweekday=None,
byhour=None, byminute=None, bysecond=None,
cache=False):
super(rrule, self).__init__(cache)
global easter
if not dtstart:
if until and until.tzinfo:
dtstart = datetime.datetime.now(tz=until.tzinfo).replace(microsecond=0)
else:
dtstart = datetime.datetime.now().replace(microsecond=0)
elif not isinstance(dtstart, datetime.datetime):
dtstart = datetime.datetime.fromordinal(dtstart.toordinal())
else:
dtstart = dtstart.replace(microsecond=0)
self._dtstart = dtstart
self._tzinfo = dtstart.tzinfo
self._freq = freq
self._interval = interval
self._count = count
下面是我的操作方法(格式为()):
很好!感谢您的解释(请注意……“\u freq”将返回相应的整数,即DAILY=3)。此版本已在此处发布:
print(my_rrule._interval)
def __init__(self, freq, dtstart=None,
interval=1, wkst=None, count=None, until=None, bysetpos=None,
bymonth=None, bymonthday=None, byyearday=None, byeaster=None,
byweekno=None, byweekday=None,
byhour=None, byminute=None, bysecond=None,
cache=False):
super(rrule, self).__init__(cache)
global easter
if not dtstart:
if until and until.tzinfo:
dtstart = datetime.datetime.now(tz=until.tzinfo).replace(microsecond=0)
else:
dtstart = datetime.datetime.now().replace(microsecond=0)
elif not isinstance(dtstart, datetime.datetime):
dtstart = datetime.datetime.fromordinal(dtstart.toordinal())
else:
dtstart = dtstart.replace(microsecond=0)
self._dtstart = dtstart
self._tzinfo = dtstart.tzinfo
self._freq = freq
self._interval = interval
self._count = count
def parse_rrule(r):
"""Sample:
DTSTART:19970930T090000
RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1
EXDATE:19960402T010000,19960403T010000,19960404T010000
"""
r = str(r) # If it's an rrule, convert to the string representation
result = {}
elements = r.split('\n')
for element in elements:
if ':' in element:
name, values = element.split(':')
else:
name = element
values = ''
vls = {}
for value in values.split(';'):
if '=' in value:
k, v = value.split('=')
v = todatetime(toint(v))
if isinstance(v, str) and ',' in v:
l = []
for e in v.split(','):
e = todatetime(toint(e))
l.append(e)
v = l
vls[k] = v
else:
vls[value] = None
if len(vls) == 1 and list(vls.values())[0] is None:
vls = list(vls.keys())[0]
if isinstance(vls, str) and ',' in vls:
l = []
for e in vls.split(','):
e = todatetime(toint(e))
l.append(e)
vls = l
else:
vls = todatetime(toint(vls))
result[name] = vls
log.debug(f'parse_rrule({r}) = {result}')
return result