与文件输入有关的问题

时间:2014-10-01 14:44:42

标签: python python-2.7

我遇到了问题,我希望得到你们的意见。

我正在使用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

2 个答案:

答案 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