我遇到了问题,我希望得到你们的意见。
我正在使用py2neo编写一个Neo4J应用程序。我想读取一个文件并使用该文件来创建节点和关系
我遇到的问题是使用下面的代码输入文件,将这些行作为字符串返回。
file = "../create_db"
dbFile=open(file,'r')
而我需要的是,不要把它作为一个字符串取回来,让它变得原始 目前问题是我想要的:
graph_db.create(node({'Id':'1', 'Description':'Computer'}))
但我明白了:
graph_db.create("node({'Id':'1', 'Description':'Computer'})")
有没有办法让文件输入原始?也许是一个让它恢复原状的图书馆?
提前致谢, Jiar
答案 0 :(得分:0)
您的输入文件似乎包含代码语句(或部分代码语句)。
您可以使用eval
内置函数执行语句,并将结果传递给graph_db.create
函数。
但是,您应该知道这允许执行任意代码(即输入文件成为执行脚本的一部分)并且应该被视为代码的一部分(即不使用不受信任的输入文件)。 / p>
答案 1 :(得分:0)
您还可以查看ast模块。虽然我不知道这是否适用于你的情况(强调我的):
ast.literal_eval(node_or_string)
安全地评估表达式节点或Unicode或Latin-1编码的字符串 包含Python表达式。 提供的字符串或节点可能只包含以下Python文字结构:字符串, 数字,元组,列表,dicts,布尔值和无。
这可以用于安全地评估包含Python表达式的字符串 来自不受信任的来源,而无需自己解析价值观。
所以,如果您对文件有一些控制权,只能使用dict
部分......
使用eval
可以是dangerous。另请查看此question and its answers。