如何在 config.json 中包含打印功能

How to include the print function in the config.json

我正在尝试使用单一职责原则编写 python 代码,我只想编辑 config.json 中的输入。在 json_writer.py 中,如果我在 config.json 中更改 URL,则必须更改输出文件名。那么,如何在现有 config.json 中添加打印文件名,这样我就不必更改代码中的任何内容?

**#config.json**
{
  "url": "https://arcgis/portal/",
  "username": "username",
  "password":"password",
  "query": "",
  "item_type": "Feature Layer"
}

**#json_reader.py**

import json
 
class JsonReader:

    def__init__(self, filename): 
        self.filename = filename

    def read_json_file(self):
        withopen(self.filename) asfile:  
            data = json.load(file)
        return data

    def get_config(self, config):
        loaded_json = self.read_json_file()
        config = loaded_json[config]
        return config

**#portal_connection.py**

from arcgis.gis import GIS

class PortalConnection:

    def__init__(self, url, username, password): 
        self.url = url
        self.username = username
        self.password = password
 
    def connect(self, query, layer):
        # Connection to ArcGIS Enterprise using a built-in account
        print("Portal for ArcGIS as a built in user")
        gis_portal = GIS(self.url, self.username, self.password)
        print("Logged in as: " + gis_portal.properties.user.username)
        return gis_portal, query, layer

**#esri_api.py**

class EsriApi:
 
    def__init__(self, portal, item_type, query): 
        self.item_type = item_type
        self.query_ = query
        self.portal = portal

    def query(self):
        api_query_result = self.portal.content.search(query=self.query_, item_type=self.item_type)
        return api_query_result

**#json_writer.py**

class JsonWriter:
 
    def __init__(self,api_query_result):
        self.api_query_result = api_query_result

    def printResults(self):
        l = []
        for service in self.api_query_result:
            if "Hosted" in service.url:
                l.append(str((service.url, service.id, service.owner)))

        with open('Output_env_Q_Hosted.txt', 'w') as f:
            for line in l:
                #print(line)
                f.write(line)
                f.write('\n')

        print("saved successfully!!!")
 
        file = open("Output_env_Q_Hosted.txt", "r")
        for i in file.readlines():
            print(i)

**#main.py**

from json_reader import JsonReader
from portal_connection import PortalConnection
from esri_api import EsriApi
from json_writer import JsonWriter
 
jreader = JsonReader('config.json')
url = jreader.get_config("url")
username = jreader.get_config("username")
password = jreader.get_config("password")
query = jreader.get_config("query")
layer = jreader.get_config("item_type")
 
con = PortalConnection(url, username, password)
portal, query, layer = con.connect(query, layer) 
esri_api = EsriApi(portal, layer, query)
results = esri_api.query()


jsonWriter = JsonWriter(results)
jsonWriter.printResults ()

您不能从 JSON 文件中 运行 代码,因此您必须更改代码。 JSON只是用来存储数据的,不是编程语言

如果你想在运行时设置文件名,你可以这样使用:

        filename = 'SomeFileName.txt' # set this with whatever code you like

        with open(filename, 'w') as f:
            for line in l:
                f.write(line)
                f.write('\n')

        print("saved successfully!!!")
 
        file = open(filename, "r")
        for i in file.readlines():
            print(i)