Home > database >  Iterate and update through folder of .json files and update value in python
Iterate and update through folder of .json files and update value in python

Time:12-15

I've struck out trying to find a suitable script to iterate through a folder of .json files and update a single line.

Below is an example json file located in a path among others. I would like to iterate through the json files in a folder containing several files like this with various information and update the "seller_fee_basis_points" from "0" to say "500" and save.

Would really appreciate the assistance.

{
  "name": "Solflare X NFT",
  "symbol": "",
  "description": "Celebratory Solflare NFT for the Solflare X launch",
  "seller_fee_basis_points": 0,
  "image": "https://www.arweave.net/abcd5678?ext=png",
  "animation_url": "https://www.arweave.net/efgh1234?ext=mp4",
  "external_url": "https://solflare.com",
  "attributes": [
    {
      "trait_type": "web",
      "value": "yes"
    },
    {
      "trait_type": "mobile",
      "value": "yes"
   },
   {
      "trait_type": "extension",
      "value": "yes"
    }
  ],
  "collection": {
     "name": "Solflare X NFT",
     "family": "Solflare"
  },
  "properties": {
    "files": [
      {
        "uri": "https://www.arweave.net/abcd5678?ext=png",
        "type": "image/png"
      },
      {
        "uri": "https://watch.videodelivery.net/9876jkl",
        "type": "unknown",
        "cdn": true
      },
      {
        "uri": "https://www.arweave.net/efgh1234?ext=mp4",
        "type": "video/mp4"
      }
    ],
    "category": "video",
    "creators": [
      {
        "address": "SOLFLR15asd9d21325bsadythp547912501b",
        "share": 100
      }
    ]
  }
}

Updated with an answer due to @JCaesar's help

import json
import glob
import os

SOURCE_DIRECTORY = r'my_favourite_directory'
KEY = 'seller_fee_basis_points'
NEW_VALUE = 500

for file in glob.glob(os.path.join(SOURCE_DIRECTORY, '*.json')):
    json_data = json.loads(open(file, encoding="utf8").read())
    # note that using the update method means
    # that if KEY does not exist then it will be created
    # which may not be what you want
    json_data.update({KEY: NEW_VALUE})
    json.dump(json_data, open(file, 'w'), indent=4)

CodePudding user response:

I recommend using glob to find the files you're interested in. Then utilise the json module for reading and writing the JSON content.

This is very concise and has no sanity checking / exception handling but you should get the idea:

import json
import glob
import os

SOURCE_DIRECTORY = 'my_favourite_directory'
KEY = 'seller_fee_basis_points'
NEW_VALUE = 500

for file in glob.glob(os.path.join(SOURCE_DIRECTORY, '*.json')):
    json_data = json.loads(open(file).read())
    # note that using the update method means
    # that if KEY does not exist then it will be created
    # which may not be what you want
    json_data.update({KEY: NEW_VALUE})
    json.dump(json_data, open(file, 'w'), indent=4)
  • Related