标签: python-dateutil

dateutil.parser.parse()在Windows平台上给出错误"initial_value必须是unicode或None,而不是str"

我确信这有一个非常简单的解决方案,但我仍然是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)

python python-dateutil

6
推荐指数
1
解决办法
9280
查看次数

python dateutil unicode警告

我使用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不是??

python unicode twitter python-dateutil

6
推荐指数
1
解决办法
2632
查看次数

检查datetime字符串是否为ISO 8601格式

我喜欢用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 datetime python-datetime python-dateutil

6
推荐指数
1
解决办法
4384
查看次数

Python dateutil反转的时区偏移标志?

有谁知道为什么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)

python datetime python-dateutil

6
推荐指数
2
解决办法
966
查看次数

dateutil 2.5.0是所需的最低版本

我正在Mac OSX上运行jupyter笔记本(Enthought Canopy python发行版2.7)(v 10.13.6).当我尝试导入pandas(导入pandas为pd)时,我收到了投诉:ImportError:dateutil 2.5.0是所需的最低版本.我有这些包版本:

  • Canopy版本2.1.3.3542(64位)
  • jupyter版本1.0.0-25
  • 熊猫版0.23.1-1
  • python_dateutil版本2.6.0-1

当我使用Canopy编辑器运行时,我没有得到这个抱怨所以它必须是一些jupyter兼容性问题.有没有人有解决方法如何解决这个问题?几个月前一切都很好,直到我最近(并且无意识地)允许更新我的包裹.

python pandas python-dateutil canopy jupyter-notebook

6
推荐指数
2
解决办法
1万
查看次数

使用python pandas解析CSV格式的日期格式为Year,Day,Hour,Min,Sec

我有几个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)

python pandas python-dateutil

5
推荐指数
1
解决办法
1万
查看次数

在 Python 中解析人类可读的重复日期

问题。在我的 Django 应用程序中,用户为计划执行创建任务。用户是非常非技术性的,如果他们能编写传统的人类可读的表达式来定义何时执行某些任务,那就太好了,例如:

  • 每逢星期一
  • 每周五、周三
  • 日常的
  • 每月 1、14、20 日
  • 每周五;每个月底

这是受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库进行日期解析,但不进行上述日期范围解析。
  • Python-dateutil - 通过 支持重复日期rrule,非常实用,但仍然不支持解析。
  • Python-crontab和Python-croniter接受标准的 Unix crontab 语法(并允许指定工作日等),但这种语法仍然过于技术性,如果可能,我想避免它。
  • Arrow和Parsedatetime不支持该功能。

那么,是否有我错过的 Python …

python django date python-datetime python-dateutil

5
推荐指数
1
解决办法
1563
查看次数

自定义dateutil.parser世纪推理逻辑

我正在处理具有两位数年份的旧文本文件,其中默认的世纪逻辑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

但我想继续使用这个模块,因为它的模糊匹配似乎运作良好.

该文档不能识别参数做这个...有我俯瞰的说法?

python python-dateutil

5
推荐指数
1
解决办法
231
查看次数

如何从 dateutil rruleset 中排除一系列日期时间?

我有一个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 实现实现吗?还是我需要创建一个函数来完成此操作?

python datetime rrule python-dateutil

5
推荐指数
0
解决办法
550
查看次数

Python从字符串中提取不同格式的日期

我尝试包 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,但它们没有涵盖这个主题,并且它们适用于特定的日期格式。

非常感谢您的帮助!

python string date extract python-dateutil

5
推荐指数
1
解决办法
653
查看次数