Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Rrule-reading';频率'';间隔';,etc价值观?_Python_Python Dateutil_Rrule - Fatal编程技术网

Python Rrule-reading';频率'';间隔';,etc价值观?

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

如何从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.
回溯(最近一次呼叫最后一次):
文件“/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