我确信这有一个非常简单的解决方案,但我仍然是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) 我使用sixohsix库从Twitter API解析一些推文的数据.我试图将推文的日期转换为我的语言环境:
from pytz import timezone
from dateutil import parser
timestamp = parser.parse(tweet["created_at"])
timestamp_arg = timestamp.astimezone(timezone('America/Buenos_Aires'))
Run Code Online (Sandbox Code Playgroud)
我得到一个unicode警告:
dateutil\parser.py:339:UnicodeWarning:Unicode相等比较无法将两个参数都转换为Unicode - 将它们解释为在time.tzname中的不等elif res.tzname和res.tzname:
我试过了
parser.parse(str(tweet["created_at"]))
parser.parse(unicode(tweet["created_at"]).encode())
Run Code Online (Sandbox Code Playgroud)
但没有变化.
除了警告,似乎没有什么打破.有谁知道为什么会发生这种情况,以及如何解决这个问题?
谢谢!
我尝试了相同的例子,但硬编码时间到字符串,没有警告的情况下工作.此外,根据该警告味精问题似乎在解析调用的情况发生,在parser.py:339时做
res.tzname in time.tzname
Run Code Online (Sandbox Code Playgroud)
也许是因为res是unicode而time.tzname不是??
我喜欢用dateutil.parser.parse模块解析日期时间字符串.这很简单.但是我在我的代码中注意到我必须检查对象是否确实在8601(并且知道).
我的结构是:
if parse(datetime).tzinfo==None:
#do something
else:
#make it aware
#do something
Run Code Online (Sandbox Code Playgroud)
我希望实现以下目标:
if <IS-8601>:
if parse(datetime).tzinfo==None:
#do something
else:
#make it aware
#do something
else:
pass
Run Code Online (Sandbox Code Playgroud)
如果我有一个8601像2014-02-28T22:30:00+0200解析实用程序做它的工作.
但是,如果我有一个2014-03-20字符串解析将在对象上添加时间.这没错,只是不需要的:2014-03-20 00:00:00
那么如何检查对象是否在8601中?如果在8601,它是否知道?我不介意换到另一个日期时间库.
有谁知道为什么python的dateutil在解析datetime字段时会反转GMT偏移的符号?
显然,这个特性不仅是dateutil而且是其他解析函数的已知结果.但是,除非应用预处理黑客,否则会导致INCORRECT日期时间结果:
from dateutil import parser
jsDT = 'Fri Jan 02 2015 03:04:05.678910 GMT-0800'
python_datetime = parser.parse(jsDT)
print(python_datetime)
>>> 2015-01-02 03:04:05.678910+08:00
jsDT = 'Fri Jan 02 2015 03:04:05.678910 GMT-0800'
if '-' in jsDT:
jsDT = jsDT.replace('-','+')
elif '+' in jsDT:
jsDT = jsDT.replace('+','-')
python_datetime = parser.parse(jsDT)
print(python_datetime)
>>> 2015-01-02 03:04:05.678910-08:00
Run Code Online (Sandbox Code Playgroud) 我正在Mac OSX上运行jupyter笔记本(Enthought Canopy python发行版2.7)(v 10.13.6).当我尝试导入pandas(导入pandas为pd)时,我收到了投诉:ImportError:dateutil 2.5.0是所需的最低版本.我有这些包版本:
当我使用Canopy编辑器运行时,我没有得到这个抱怨所以它必须是一些jupyter兼容性问题.有没有人有解决方法如何解决这个问题?几个月前一切都很好,直到我最近(并且无意识地)允许更新我的包裹.
我有几个CSV文件格式:
Year,Day,Hour,Min,Sec.,P1'S1
2003, 1, 0, 0,12.22, 0.541
2003, 1, 1, 0,20.69, 0.708
2003, 1, 2, 0, 4.95, 0.520
2003, 1, 3, 0,13.42, 0.539
...
Run Code Online (Sandbox Code Playgroud)
(当天,是一年中的某一天)我正在尝试使用熊猫图书馆阅读它们(到目前为止似乎是一个很棒的文章).
有一个内置函数可以在pandas中读取CSV,甚至更好的是,该函数可以检查列的日期类型.并自动将其用作索引(这对我正在做的事情来说非常完美).
问题是,我无法使用这种格式的日期数据.
我试过了:
data = pd.read_csv("csvFile.csv", index_col=[0, 1], , index_col=[0, 1, 2, 3, 4] parse_dates=True)
Run Code Online (Sandbox Code Playgroud)
但它只能正确地获得年份:
In [36]: data.index
Out[36]:
MultiIndex
[(<Timestamp: 2003-09-04 00:00:00>, 1, 0, 0, 12.22)
(<Timestamp: 2003-09-04 00:00:00>, 1, 1, 0, 20.69)
(<Timestamp: 2003-09-04 00:00:00>, 1, 2, 0, 4.95) ...,
(<Timestamp: 2003-09-04 …Run Code Online (Sandbox Code Playgroud) 问题。在我的 Django 应用程序中,用户为计划执行创建任务。用户是非常非技术性的,如果他们能编写传统的人类可读的表达式来定义何时执行某些任务,那就太好了,例如:
这是受Todoist 的启发。目前,只需要日期;没有时间。我花了几个小时在谷歌上搜索图书馆来做到这一点,但没有运气。我期待一个函数,比如说in_range(expression, date),这样:
>>> in_range('every monday, wednesday', date(2014, 4, 28))
True
>>> in_range('every end of month', date(2014, 5, 12))
False
>>> in_range('every millenium', date(2014, 5, 8))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unknown token "millenium".
Run Code Online (Sandbox Code Playgroud)
变体。这就是我看过的。
datetime库进行日期解析,但不进行上述日期范围解析。rrule,非常实用,但仍然不支持解析。那么,是否有我错过的 Python …
我正在处理具有两位数年份的旧文本文件,其中默认的世纪逻辑dateutil.parser似乎不能正常工作.例如,对珍珠港的袭击没有开始dparser.parse("12/7/41")(返回2041-12-7).
回归到1900年的世纪"门槛"似乎发生在66:
import dateutil.parser as dparser
print(dparser.parse("12/31/65")) # goes forward to 2065-12-31 00:00:00
print(dparser.parse("1/1/66")) # goes back to 1966-01-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
为了我的目的,我想将此"阈值"设置为17,以便:
"12/31/16"解析到2016-12-31(yyyy-mm-dd)"1/1/17" 解析到1917-01-01但我想继续使用这个模块,因为它的模糊匹配似乎运作良好.
该文档不能识别参数做这个...有我俯瞰的说法?
我有一个rruleset()包含基本规则的:
rset = rruleset()
rset.rrule(rrule(SECONDLY, dtstart=start_date, interval=duration, until=end_date))
Run Code Online (Sandbox Code Playgroud)
我想从该集合中排除一系列日期时间。
例如:我想排除周一下午 3:00 到晚上 9:00 之间出现的任何情况,这可以通过 rrule 实现实现吗?还是我需要创建一个函数来完成此操作?
我尝试包 dateutil 从字符串中提取日期部分。如果字符串中包含确切的日期,则效果很好,例如:
from dateutil.parser import parse
try:
date = parse(string, fuzzy=True)
print(str(date)[:10])
except ValueError:
print("no date in text")
string = "an example of date:8 march 2019"
output: 2019-03-08
string = "an example of date: 2019/3/8"
output: 2019-03-08
string = "an example of pure string"
output: no date in text
Run Code Online (Sandbox Code Playgroud)
但是,当字符串中包含数字而不是日期时,就会出错并将其视为日期:
string = "an example of wrong date: 8"
output: 2022-03-08
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何使用这个包或类似的包来解决这个问题。有一些与提取日期相关的帖子,例如Extract date from string in python,但它们没有涵盖这个主题,并且它们适用于特定的日期格式。
非常感谢您的帮助!