Nat*_*ens 4 python excel pywin32
我正在使用pywin32读取/写入Excel文件。我在Excel中有一些日期,格式为yyyy-mm-dd hh:mm:ss。我想将它们作为datetime.datetime对象导入Python。这是我开始的代码行:
prior_datetime = datetime.strptime(excel_ws.Cells(2, 4).Value, '%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
那没用。我得到了错误:
strptime() argument 1 must be str, not pywintypes.datetime
Run Code Online (Sandbox Code Playgroud)
我尝试将其转换为字符串,如下所示:
prior_datetime = datetime.strptime(str(excel_ws.Cells(2, 4).Value), '%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
那也不起作用。我得到了错误:
ValueError: unconverted data remains: +00:00
Run Code Online (Sandbox Code Playgroud)
因此,我尝试了一些不同的方法:
prior_datetime = datetime.fromtimestamp(int(excel_ws.Cells(2, 4).Value))
Run Code Online (Sandbox Code Playgroud)
仍然没有运气。错误:
TypeError: a float is required.
Run Code Online (Sandbox Code Playgroud)
投向浮动广告并没有帮助。也不是整数。(嘿,我当时很绝望。)
我可能在找错地方,但是我在查找有关pywin32的任何常规文档(尤其是pywintypes或pywintypes.datetime)方面的良好文档时遇到了麻烦。
有什么帮助吗?
我认为你与 . 的关系非常密切datetime.datetime.fromtimestamp
。一直采用这种方法,您可以pywintypes.datetime
使用其方法将对象转换为时间戳timestamp
。为了确保时区安全,还可以使用该tzinfo
属性。请参阅In [4]:
下面的完整语法。
当我尝试从 Excel 书的几行中创建 pd.DataFrame 时,我刚刚遇到了同样的问题。我不断收到这个可怕的“Python 已停止工作”对话框。
In [1]: pywindt
Out[1]: pywintypes.datetime(2018, 9, 13, 14, 2, 24, tzinfo=TimeZoneInfo('GMT Standard Time', True))
In [2]: str(pywindt)
Out[2]: '2018-09-13 14:02:24+00:00'
In [3]: # Conversion takes place here!
In [4]: dt = datetime.datetime.fromtimestamp(
...: timestamp=pywindt.timestamp(),
...: tz=pywindt.tzinfo
...: )
In [5]: dt
Out[5]: datetime.datetime(2018, 9, 13, 14, 2, 24, tzinfo=TimeZoneInfo('GMT Standard Time', True))
In [6]: str(dt)
Out[6]: '2018-09-13 14:02:24+00:00'
Run Code Online (Sandbox Code Playgroud)
作为后续,如果您需要检查单元格值是否是 pywintypes 日期时间,以下内容应该足够了。
In [7]: import pywintypes
In [8]: isinstance(pywindt, pywintypes.TimeType)
Out[8]: True
In [9]: # just out of curiousity
In [10]: isinstance(dt, pywintypes.TimeType)
Out[10]: False
Run Code Online (Sandbox Code Playgroud)
所以问题是+00:00
时区偏移量。考虑到这一点,没有针对Python的即用型解决方案
datetime.datetime.strptime("2016-04-01 17:29:25+00:00", '%Y-%m-%d %H:%M:%S %z')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/_strptime.py", line 324, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S %z'
Run Code Online (Sandbox Code Playgroud)
一种创可贴解决方案是剥离时区,但感觉很糟糕。
datetime.datetime.strptime("2016-04-01 17:29:25+00:00".rstrip("+00:00"), '%Y-%m-%d %H:%M:%S')
datetime.datetime(2016, 4, 1, 17, 29, 25)
Run Code Online (Sandbox Code Playgroud)
环顾四周看起来(如果可以使用第三方库)dateutil
可以解决此问题,然后使用会更好datetime.strptime
。
pip install python-dateutil
Run Code Online (Sandbox Code Playgroud)
>>> import dateutil.parser
>>> dateutil.parser.parse("2016-04-01 17:29:25+00:00")
datetime.datetime(2016, 4, 1, 17, 29, 25, tzinfo=tzutc())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5271 次 |
最近记录: |