在python中的同一脚本中修改两个文件

时间:2019-07-03 15:30:31

标签: python

我有两个具有价格值的json文件。这两个值中的每一个都在每个文件中。第二个对应于其他价格的平均值(在“ soldnumber”键中计数。我想要创建一个if语句,其中:如果售出数量> 3,则将“ avgactualeu”值添加到“ cote_actual”。其他:添加cote_lv值。

第一个数据库的样本:

  [{
    "objectID": 10000,
    "cote_lv": 28000,
  },
  {
    "objectID": 10001,
    "cote_lv": 35000,
  }...]

第二个示例:

    [{
        "objectID": 10002,
        "avg_actual": 47640,
        "sold_number": 2,
    },
    {
        "objectID": 10001,
        "sold_number": 5,
        "unsold_number": 1,
        "unsold_var": 17
    }...]

我期望两个文件中每个objectID的输出都带有“ cote_actual”:值。

我的python代码不起作用:

import json

with open('./output/gmstatsencheresdemo.json', encoding='utf-8') as data_file2, open('./live_files/demo_db_live.json', encoding='utf-8') as data_file:
    data2 = json.loads(data_file2.read())
    data = json.loads(data_file.read())

for i in data:
    cotelv = i.get('cote_lv')
    i['cote_actual'] = {}
    i['cote_actual'] = cotelv

for x in data2:
    soldnumber = x.get('sold_number')
    avgactual = x.get('avg_actual')
    x['cote_actual'] = {}
    x['cote_actual'] = avgactual


    if soldnumber >= 3:
        x['cote_actual'] = avgactual
    elif soldnumber <= 3:
        x['cote_actual'] = cotelv
    print(x['cote_actual'])

编辑:正确显示avgactual时我的输出正常,但cotelv却不正确:它不会遍历所有值,而只显示一个(在此示例中为9000 )

输出:

9000
107792
9000
125700
9000

1 个答案:

答案 0 :(得分:1)

我相信可以在How can I open multiple files using "with open" in Python?找到该答案。 但是,简而言之,您可以在同一行中打开两个文件,然后在“ with”缩进内执行操作。代码失败的原因是,在“ with”之后,如果不缩进,则这些操作将不考虑打开的文件,就像循环或常规的“ if”语句一样。因此,您可以同时打开它们并在正确的缩进下对其进行编辑,如下所示。

with open('./output/gmstatsencheresdemo.json', encoding='utf-8') as data_file2, open('./live_files/demo_db_live.json', encoding='utf-8') as data_file:
    data2 = json.loads(data_file2.read())
    data = json.loads(data_file.read())
    #Now that they are opened, you can perform the actions through here

希望能回答您的问题!