我已经探讨了其他问题,我并不惊讶地发现没有符合我需要的答案。
我正在吸收现有项目,需要对其进行一些改进。一个完整的重写是远在将来,并且目前不可能改变文件格式,因此我需要一个解决方法。
数据源是一个数据库,具有键/值对字段。
我正在选择数据库并导出。
问题:
我们正在创建一个新词典,然后解析它。
output = []
output.append("dictionary = {" + "\n")
# dbdata is just a dictionary of data from the database containing key and value
for result in dbdata
output.append("\"" + str(result['key']) + "\" : \"" + str(result['value']) + "\",")
output.append("}")
response = "\n".join(output)
我们现在有一个非常大的字典将被打印出来。
当前系统的输出是:
dictionary = {
"one": "one value",
"two": "two value",
'three': '
12345/54321*23:Some-Magic/Stuff
12345/54331*23:Some-Magic/Stuff
12345/54321*21:Some-Magic/Stuff
12345/54321*53:Some-Magic/Stuff
12341/54321*23:Some-Magic/Stuff
12343/54321*23:Some-Magic/Stuff
12347/54321*23:Some-Magic/Stuff
12145/54321*23:Some-Magic/Stuff',
"four":"four value",
'five': "['this','is','another']",
}
所需的格式如下所示:
dictionary = {
"one": "one value",
"two": "two value",
"three": """
12345/54321*23:Some-Magic/Stuff
12345/54331*23:Some-Magic/Stuff
12345/54321*21:Some-Magic/Stuff
12345/54321*53:Some-Magic/Stuff
12341/54321*23:Some-Magic/Stuff
12343/54321*23:Some-Magic/Stuff
12347/54321*23:Some-Magic/Stuff
12145/54321*23:Some-Magic/Stuff""",
"four":"four value",
"five":['this','is','another'],
}
注意:您将在现有内容中看到:
注意为什么这不是重复:
是的我觉得它很荒谬,因为它不是一种非常人性化的格式。
对于长篇文章感到抱歉,这是一个难以解释的问题 - 我意识到这一切都是糟糕的设计。
感谢任何能提供帮助的人。
答案 0 :(得分:0)
我想出来 - 至少对我自己的用例来说。
为清楚起见,我正在执行以下操作:
以下是解决我问题的代码 - 当然,如果有更好的方法可以做到这一点,我很乐意知道。
import ast
import json
dictionary = {
"one": "one value",
"two": "two value",
"three": """
12345/54321*23:Some-Magic/Stuff
12345/54331*23:Some-Magic/Stuff
12345/54321*21:Some-Magic/Stuff
12345/54321*53:Some-Magic/Stuff
12341/54321*23:Some-Magic/Stuff
12343/54321*23:Some-Magic/Stuff
12347/54321*23:Some-Magic/Stuff
12145/54321*23:Some-Magic/Stuff""",
"four": "four value",
"five": "['this','is','another']",
}
def export_python_formatting(input):
output = "config = { \n"
evalVal = ""
for key, value in input.items():
isJSON = False
output += " "
key = str(key)
# See if the value is correct JSON
try:
z = json.loads(value)
# Valid JSON - This might be a possible datatype in my use case.
output += '"' + key + '"' + ":" + "'''" + value + "'''"
evalVal = value
isJSON = True
except:
# Invalid JSON - So let's use literal_eval to see if it contains a list
try:
evalVal = ast.literal_eval(value)
except SyntaxError:
evalVal = value
except ValueError:
print("There was a value error with " + key)
varType = type(evalVal)
# print(varType)
if varType is str:
if "\n" in value:
output += '"' + key + '"' + ":" + "'''" + value + "'''"
else:
if isJSON is False:
output += '"' + key + '"' + ":" + '"' + value + '"'
else:
output += '"' + key + '"' + ":" + str(value)
output += ",\n"
output += "}"
return output
x = export_python_formatting(dictionary)
print(x)
感谢所有帮助过的人。