hel*_*ker 6 python binary datetime timestamp unpack
我想在 Python 中的二进制文件中存储日期时间列表。
编辑:“二进制”是指每种数据类型的最佳数字表示。这个应用是保存由(unix-timestamp, latitude, longitude, height)组成的GPS轨迹点,所以整个结构是小端的“Long, float, float, float”,每个值有四个字节。
注意:由于对 Unix 平台的任何影响,我不使用“unix-timestamp”,而只是作为表示日期时间值的明确方式。
目前,我正在执行下面的代码,但除了我仍在解决的一些时区混淆(我的时区是 -3)之外,我相信转换为int和返回可能不是正确的方法,因为datetime和datetime64是python 中的本机类型/numpy,如果我没记错的话。因此, adatetime64需要八个字节,而不是我用于(长)unix-timestamp 的四个字节。
import datetime
import calendar
import struct
now = datetime.datetime.now()
print now
stamp = calendar.timegm(now.utctimetuple())
print stamp
binarydatetime = struct.pack('<L', stamp)
recoverstamp = struct.unpack('<L', binarydatetime)[0]
print recoverstamp
recovernow = datetime.datetime.fromtimestamp(recoverstamp)
print recovernow
Run Code Online (Sandbox Code Playgroud)
所以主要问题是:“这是将朴素的日期时间转换为二进制并返回的pythonic方式吗?”
还有一个问题是:“如果这段代码中的所有内容都应该是幼稚的,为什么我会有时区偏移量?”
谢谢阅读!
我找到了一种使用 Unix 时间戳并将其存储为整数的方法。这对我有用,因为我不需要亚秒级分辨率,但我认为长整数可以通过对代码进行一些修改来实现微秒级分辨率。
从我原来的变化在于更换calendar.timegm的time.mktime,也utctimetuple通过timetuple,把一切都太天真了。
这个:
import datetime
import struct
import time
now = datetime.datetime.now()
print now
stamp = time.mktime(now.timetuple())
print stamp
recoverstamp = datetime.datetime.fromtimestamp(stamp)
print recoverstamp
binarydatetime = struct.pack('<L', stamp)
recoverbinstamp = struct.unpack('<L', binarydatetime)[0]
print recoverbinstamp
recovernow = datetime.datetime.fromtimestamp(recoverbinstamp)
print recovernow
Run Code Online (Sandbox Code Playgroud)
返回这个:
2013-09-02 11:06:28.064000
1378130788.0
2013-09-02 11:06:28
1378130788
2013-09-02 11:06:28
Run Code Online (Sandbox Code Playgroud)
由此,我可以轻松地将打包binarydatetime后的文件写入文件,稍后再读回来。
小智 0
如果你想将对象保存到二进制文件中,你可能会考虑pickle
据我所知,它写入一个字节流,所以它足够二进制,但结果是
Python 特定的
另外,我认为它应该与日期时间一起使用。
您将保存以下内容:
with open('your_file', 'wb') as file:
pickle.Pickler(file).dump(your_var)
Run Code Online (Sandbox Code Playgroud)
这是为了恢复
with open('your_file', 'rb') as file:
recovered=pickle.Unpickler(file).load()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11948 次 |
| 最近记录: |