在Python中从pyephem日期字符串中提取数据

时间:2017-04-12 17:48:00

标签: python pyephem

我想提取日出时间,如果我执行以下操作

sun = ephem.Sun()
r1 = home.next_rising(sun)
print ("Visual sunrise %s" % r1)
risehr = r1[10:12]
print ("Rise Hour = %s" % risehr)

我收到了错误

>>'ephem.Date' object has no attribute '__getitem__'

我可以打印字符串r1但不能从中提取(?) 我尝试了类似问题的解决方案,但是无法取得任何进展,如果这似乎是一个双重帖子,我会道歉。

2 个答案:

答案 0 :(得分:3)

据我了解你的问题,你只想打印出一小时的日出。 r1ephem.Date type的对象。你可以用蛮力

...
risehr = str(r1)[10:12]
...

或者您可以将r1对象转换为datetime,将datetime转换为str代表

...
risehr = r1.datetime().strftime('%H') 
...

或首先将其转换为tuple

...
risehr = r1.tuple()[3]
...

您可以在Conversions部分的this page阅读所有可用选项。

答案 1 :(得分:1)

@kvorobiev回答了如何从数据的字符串表示中提取的问题。但问题的另一半是错误:

'ephem.Date' object has no attribute '__getitem__'

根据next_rising()函数的PyEphem documentation

  

如果搜索成功,则返回日期值。

Furthermore, Date objects have an important property

  

日期存储并作为浮动返回。只有在打印,传递给str()或使用'%s'格式化时,日期才会表示为一个字符串,表示日历日期和时间。

当您发出命令risehr = r1[10:12]时,Python解释器尝试调用Date.getattr()来获取与切片10:12对应的Date对象中的字段。如果没有这种方法,切片对Date对象没有意义。

但一切都不会丢失!您仍然可以获取Date对象的时间信息:

  

调用.tuple()将日期分为年,月,日,小时,分钟和秒。

然后,您可以根据需要对此元组进行切片以获得小时:

hour = r1.tuple()[3]

或详尽无遗:

year, month, day, hour, minute, second = r1.tuple()