如何在 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)
我正在尝试使用单一职责原则编写 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)