我想提取日出时间,如果我执行以下操作
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
但不能从中提取(?)
我尝试了类似问题的解决方案,但是无法取得任何进展,如果这似乎是一个双重帖子,我会道歉。
答案 0 :(得分:3)
据我了解你的问题,你只想打印出一小时的日出。 r1
是ephem.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()