如何添加保存在 .json 文件中的两个日期?

How do i add two dates that are saved in .json files?

我很难将保存在两个单独 json 文件中的两个日期相加。我想将保存在单独库中的设置日期一起添加。

第一个文件 (A1.json) 包含:{"expires": "2019-09-11"}

第二个文件 (Whitelist.json) 包含:{"expires": "0000-01-00"}

这些日期是使用 tkcalendar 创建的,稍后会导出到这些单独的文件中,我的想法是将它们相加可以让我设置一个未来一个月的时间日期。但是,如果没有某种形式的错误,我似乎无法将它们加在一起。

我试过将 json 文件转换为 python 中的字符串,然后添加它们并使用 striptime 命令对日期求和。

这里是相关的代码块:

{with open('A1.json') as f:
data=json.loads(f.read())
for material in data.items():
A1 = (format(material[1]['expires']))
with open('Whitelist.json') as f:
data=json.loads(f.read())
for material in data.items():
A2 = (format(material[1]['expires']))

print(A1+A2)}    

用这个的时候,就是一个接一个地粘贴。他们没有按照我需要的方式求和。

我也试过下面的代码:

{t1 = dt.datetime.strptime('A1', '%d-%m-%Y')
t2 = dt.datetime.strptime('Whitelist', '%d-%m-%Y')
time_zero = dt.datetime.strptime('00:00:00', '%d/%m/%Y')
print((t1 - time_zero + Whitelist).time())}

然而,这不断给出ValueError: time data does not match format '%y:%m:%d'.

我期望的是 2019-09-11 和 0000-01-00 的结果之和是 2019-10-11。但是,结果是 2019-09-110000-01-00。尝试 strptime 方法会给出 ValueErrors,例如:ValueError: time data does not match format '%y:%m:%d'.

提前谢谢你,如果我第一次做错了,我深表歉意post。

使用pandas:

  • 未提供 json 文件的实际格式,因此请使用类似以下的内容将数据导入 DataFrame
    • pd.read_json('A1.json', orient='records'): 参数将取决于文件的格式
    • json_normalize
  • d2 不是正确的 datetime 格式,所以不要尝试转换它。
  • 下面的 Code 部分将使用 dict 来设置 DataFrame 示例。

json 个文件到 DataFrames:

df1 = pd.read_json('A1.json', orient='records')
df2 = pd.read_json('Whitelist.json', orient='records')
df = pd.DataFrame()
df['expires'] = df1.expires
df['d2'] = df2.expires

代码:

import pandas as pd

df = pd.DataFrame({"expires": ["2019-09-11", "2019-10-11", "2019-11-11"],
                    "d2": ["0000-01-00", "0000-02-00", "0000-03-00"]})

使用 str.split 扩展 d2:

df.expires = pd.to_datetime(df.expires)
df[['y', 'm', 'd']] = df.d2.str.split('-', expand=True)

使用pd.DateOffset:

df['expires_new'] = df[['expires', 'm']].apply(lambda x: x[0] + pd.DateOffset(months=int(x[1])), axis=1)

  • 如果 d2 预计不仅仅是一个新的 m 或月份值,则可以更改 lambda 表达式以调用针对 [=32= 进行调整的函数]、md 值。