我正在使用python-dateutil包中的rrule方法.我想创建一个可以忽略假日日历中的日期的规则.我知道exdate()方法,但这似乎只是从生成的输出列表中过滤日期.
from dateutil.rrule import *
from datetime import datetime
set = rruleset()
set.rrule(rrule(MONTHLY, count=4, bysetpos=-1, byweekday=(MO, TU, WE, TH, FR), dtstart=datetime(2013,1,1)))
list(set)
# outputs 4 dates without an exdate() call
> [datetime.datetime(2013, 1, 31, 0, 0), datetime.datetime(2013, 2, 28, 0, 0), datetime.datetime(2013, 3, 29, 0, 0), datetime.datetime(2013, 4, 30, 0, 0)]
set.exdate(datetime.datetime(2013, 2, 28, 0, 0))
list(set)
# only outputs 3 dates, ignoring the date provided in exdate()
> [datetime.datetime(2013, 1, 31, 0, 0), datetime.datetime(2013, 3, …Run Code Online (Sandbox Code Playgroud) 是否有优雅的转换relativedelta和timedelta?
用例是获取用户输入ISO日期.Python isodate会返回isodate.duration.Duration或者datetime.timedelta.
我们需要的功能relativedelta(根据"datetime.timedelta"和"dateutil.relativedelta.relativedelta"之间的差异,只使用几天? - 它做得更多)所以需要将这两种类型转换为a relativedata.
Dateutil的timedelta对象似乎有一个自定义__str__方法:
In [1]: from datetime import timedelta
In [2]: td = timedelta(hours=2)
In [3]: str(td)
Out[3]: '2:00:00'
Run Code Online (Sandbox Code Playgroud)
我想做的是timedelta从字符串表示中重新创建一个对象.然而,据我所知,该datetime.parser.parse方法将始终返回一个datetime.datetime对象(参见https://dateutil.readthedocs.io/en/stable/parser.html):
In [4]: import dateutil.parser
In [5]: dateutil.parser.parse(str(td))
Out[5]: datetime.datetime(2016, 11, 25, 2, 0)
Run Code Online (Sandbox Code Playgroud)
我现在看到的唯一方法就是将转换时间值转换为天,小时和分钟,"破坏一些令人作呕的简单(但冗长)数学"以获得秒,分,小时等,并将这些传递__init__给新的timedelta.或者是否有更简单的方法?
我有以下字符串输入:24052017.当我尝试做的时候:
>>>dateutil.parser.parse("24052017")
Run Code Online (Sandbox Code Playgroud)
它告诉我month must be in 1..12.
我甚至尝试过:
>>>dateutil.parser.parse("24052017", firstday=True)
Run Code Online (Sandbox Code Playgroud)
它给了我完全相同的结果.
似乎发生的事情是,它不喜欢没有空格或分隔符的事实.它正确地读取了一天,但是当它读到的那个月0520.这是我怀疑的,至少.
如何在dateutil.parser不操纵字符串的情况下使用转换此特定输入?
我确信这有一个非常简单的解决方案,但我仍然是Python的新手.
我正在尝试使用dateutil.parser.parse()来解析带有时间戳的字符串:
>>> import dateutil.parser
>>> a = dateutil.parser.parse("2011-10-01 12:00:00+01:00")
>>> print a
2011-10-01 12:00:00+01:00
Run Code Online (Sandbox Code Playgroud)
这在我的Linux服务器上工作正常,但在我的Windows测试框中它会出错:
>>> import dateutil.parser
>>> a = dateutil.parser.parse("2011-10-01 12:00:00+01:00")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 698, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 302, in parse
res = self._parse(timestr, **kwargs)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 350, in _parse
l = _timelex.split(timestr)
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 144, in split
return list(cls(s))
File "C:\Python27\lib\site-packages\python_dateutil-2.0-py2.7.egg\dateutil\parser.py", line 44, in __init__
instream = StringIO(instream) …Run Code Online (Sandbox Code Playgroud) 如何解析没有年份的日期(使用 dateutil),以便当当前日期为 17/11/2012 时,这些日期将被解析如下:
print parser.parse("23 nov", dayfirst=True, yearfirst=False, fuzzy=True)
# 23/11/2012
print parser.parse("28 dec", dayfirst=True, yearfirst=False, fuzzy=True)
# 28/12/2012
print parser.parse("3 jan", dayfirst=True, yearfirst=False, fuzzy=True)
# 3/01/2013
Run Code Online (Sandbox Code Playgroud)
我想要的是已经过去的几个月将出现在今年的下一年中。有什么简单的解决方案吗?
我使用dateutil来解析图片文件名并根据日期对它们进行排序.由于并非我的所有图片都有元数据,因此dateutil试图猜测它们的放置位置.
我的大多数照片都采用以下格式:2007-09-10_0001.jpg 2007-09-10_0002.jpg等...
fileName = os.path.splitext(file)[0]
print("Guesssing date from ", fileName)
try:
dateString = dateParser.parse(file, fuzzy=True)
print("Guessed date", dateString)
year=dateString.year
month = dateString.month
day=dateString.day
except ValueError:
print("Unable to determine date of ", file)
Run Code Online (Sandbox Code Playgroud)
我得到的回报是这样的:
('Guesssing date from ', '2007-09-10_00005')
('Unable to determine date of ', '2007-09-10_00005.jpg')
Run Code Online (Sandbox Code Playgroud)
现在我应该能够从下划线之后删除所有内容,但如果可能的话,我想要一个更强大的解决方案,以防我有其他格式的图片.我虽然模糊会尝试在字符串中找到任何日期并与之匹配,但显然不起作用......
是否有一种简单的方法可以让解析器找到任何看起来像日期的东西并在此之后停止?如果没有,强制解析器忽略下划线后的所有内容的最简单方法是什么?或者使用忽略部分定义多个日期格式的方法.
谢谢!
我试图使用时区感知日期时间dateutil.parser.parse()来解析默认str(datetime.datetime.now())输出.但是,parse()似乎丢失了时区信息并将其替换为当地时间时区.下面是IPython输出:
In [1]: from django.utils.timezone import now
In [3]: import dateutil
In [4]: t = now()
In [6]: print t
2014-07-14 08:51:49.123342+00:00
In [7]: st = unicode(t)
In [8]: print dateutil.parser.parse(st)
2014-07-14 08:51:49.123342+02:00
Run Code Online (Sandbox Code Playgroud)
据我dateutil所知,在猜测日期格式时会有一些遗传因素,这里可能会出错.
如何为解析时区感知日期时间提供准确的日期时间格式?
更好的 - 如果知道格式如何只使用Python stdlib解析这个日期时间,而没有dateutil依赖?
我尝试执行marathon-lb.py并抛出下一个错误:
Traceback (most recent call last):
File "./marathon_lb.py", line 46, in <module>
import dateutil.parser
ImportError: No module named 'dateutil'
Run Code Online (Sandbox Code Playgroud)
我只是用apt和pip安装python.我跑了:
sudo apt-get install python-pip
pip install python-dateutil
Run Code Online (Sandbox Code Playgroud)
我用以下代码编译脚本:python -m py_compile script.py
python应用程序:
from operator import attrgetter
from shutil import move
from tempfile import mkstemp
from wsgiref.simple_server import make_server
from six.moves.urllib import parse
from itertools import cycle
from common import *
from config import *
from lrucache import *
from utils import *
import argparse
import json
import logging
import os …Run Code Online (Sandbox Code Playgroud) 我设置
locale.setlocale(locale.LC_TIME, ('de', 'UTF-8'))
Run Code Online (Sandbox Code Playgroud)
要解析的字符串是:
Montag, 11. April 2016 19:35:57
Run Code Online (Sandbox Code Playgroud)
我用:
note_date = parser.parse(result.group(2))
Run Code Online (Sandbox Code Playgroud)
但得到以下错误:
回溯(最近一次调用):文件“/Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py”,第 1531 行,在 globals = debugger.run(setup['file'], None, None, is_module ) File "/Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py", line 938, in run pydev_imports.execfile(file, globals, locals) # 执行脚本 File "/Applications/PyCharm.app/Contents /helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile exec(compile(contents+"\n", file, 'exec'), glob, loc) File "/Users/adieball/Dropbox/Multiverse/Programming /python/repositories/kindle/kindle2en.py", line 250, in main(sys.argv[1:]) 文件 "/Users/adieball/Dropbox/Multiverse/Programming/python/repositories/kindle/kindle2en.py",第 154 行,在主要 note_date = parser.parse(result.group(2)) 文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/dateutil/parser.py”,第 1164 行,在解析中返回 DEFAULTPARSER.parse(timestr, **kwargs) 文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/dateutil/parser.py”,第 555 行,在解析中raise ValueError("Unknown string format") ValueError: Unknown string format在解析引发 ValueError("Unknown string format") …