【问题标题】:How to include the print function in the config.json如何在 config.json 中包含打印功能
【发布时间】:2022-01-12 16:57:25
【问题描述】:

我正在尝试使用单一职责原则编写 python 代码,我只想编辑 config.json 中的输入。如果我更改 config.json 中的 URL,则必须在 json_writer.py 中更改输出文件名。那么,如何在现有的 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 ()

【问题讨论】:

    标签: python json solid-principles python-class


    【解决方案1】:

    您无法从 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)
    

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多