当前位置: 首页 > 知识库问答 >
问题:

如何写和读日期字典[重复]

席烨
2023-03-14

我需要一种有效的方法来编写包含datetime在内的词典的文件,然后能够将它们作为dict读取。格言如下:

my_dict = {'1.0': [datetime.datetime(2000, 1, 1, 0, 0, 0, 000000, tzinfo=tzutc())], '2.0': [datetime.datetime(2000, 1, 1, 0, 0, 0, 000000, tzinfo=tzutc())]}

试图与json倾倒:

with open("my_file.json", 'w+') as f:
    json.dump(my_dict, f)
TypeError: Object of type 'datetime' is not JSON serializable

还尝试将整个dict作为字符串编写,然后用yaml导入,这几乎奏效,但索引却搞砸了。

with open("my_file", 'w+') as f:
    f.write(str(my_dict))

with open("my_file", 'r') as f:
    s = f.read()
    new_dict = yaml.load(s)

print(new_dict['1.0'][0])
Output:   datetime.datetime(2000
Expected: 2000-01-01 00:00:00+00:00

共有3个答案

滕璞瑜
2023-03-14

您可以使用strftime方法:

my_dict = {
    '1.0': [
               datetime.datetime(
                   2000, 
                   1, 
                   1, 
                   0, 
                   0, 
                   0, 
                   000000, 
                   tzinfo=tzutc()
              ).strftime("%Y-%m-%d %H:%M:%S")],
    '2.0': [
              datetime.datetime(
                   2000, 
                   1, 
                   1, 
                   0, 
                   0, 
                   0, 
                   000000, 
                   tzinfo=tzutc()
              ).strftime("%Y-%m-%d %H:%M:%S")
           ]

}

丌官开宇
2023-03-14

您可以使用Pickle。它用于序列化和反序列化Python对象结构。Python中的任何对象都可以被腌制,以便保存在磁盘上。泡菜所做的是,在将对象写入文件之前,它首先“序列化”对象。Pickling是一种将python对象(列表,判决等)转换为字符流的方法。这个想法是这个字符流包含在另一个python脚本中重建对象所需的所有信息。来源

这将有助于:

>>> import pickle
>>> file_Name = "testfile"
>>> fileObject = open(file_Name,'wb')
>>> my_dict = {'1.0': [datetime.datetime(2000, 1, 1, 0, 0, 0, 000000, tzinfo=tzutc())], '2.0': [datetime.datetime(2000,
1, 1, 0, 0, 0, 000000, tzinfo=tzutc())]}
>>> pickle.dump(my_dict, fileObject)
>>> fileObject.close()
>>> fileObject = open(file_Name,'r')
>>> my_dict_loaded = pickle.load(fileObject)
>>> my_dict_loaded
{'1.0': [datetime.datetime(2000, 1, 1, 0, 0, 0, 000000, tzinfo=tzutc())], '2.0': [datetime.datetime(2000,
1, 1, 0, 0, 0, 000000, tzinfo=tzutc())]}
宣胜
2023-03-14

您可能会觉得这很麻烦,但python中的正确方法是使用自定义编码器。您可以在这里选择格式(iso),但我建议在示例中使用datetime.date()。

from datetime import date,datetime
import json, re

class DateTimeAwareEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime):
            return o.isoformat()

        return json.JSONEncoder.default(self, o)

json.dumps(yourobj, cls=DateTimeAwareEncoder)

如何使用自定义解码器要复杂得多,通常最好使用json.loads加载,然后转换已知密钥以避免自定义解码器。

 类似资料:
  • 我在时间序列日期-时间解析函数中收到错误。数据已附加。我尝试这样读取日期和时间列。

  • 我试图从一个JSON文件中读取一个字典,它看起来像这样。 我想从文件中加载字典到。我目前正在使用这个方法来尝试这个,但是,它拒绝加载任何不是字符串的东西。 如何将JSON字典加载到python字典中?

  • audit_modifier是VARCHAR2(30个字符),并且audit_modifier值以以下格式存储[2018-01-18T17:19:47.285z]。 从TO_DATE('2018-01-16','yyyy-mm-dd')和TO_DATE('2018-01-16','yyyy-mm-dd')之间的trunc(audit_modifier)的表中选择*; ORA-00932:不一致的数

  • 在PHP中,我需要检查一个字符串是否为以下格式: 其中x、y和z是整数。因此,字符串包含3个整数,由2个破折号分隔,规则如下: 验证这一点最简单的方法是什么?

  • 问题内容: 我的strings.xml中有这样的字符串: 我在代码中像这样使用它们: 但是它以小写形式显示日期和月份,我希望将两者都大写。我该如何实现? 问题答案: 我像这样修复它:

  • 问题内容: 我想使用两次,所以我可以计算持续时间,但我也想以用户可读的格式显示时间和日期。我在计算方面遇到了麻烦,但看不到内置函数可以转换为漂亮的时间或时间/日期。 我用 产生美好的时间和日期,而我最终想要做的是将我产生的价值展示给 例如 当我尝试时 类型不匹配:无法从long转换为DateFormat 我尝试使用一些强制转换,但看不到如何实现。 问题答案: 它将起作用。