2014-10-01 68 views
0

我遇到了一個問題,我想從你們那裏獲得輸入。與文件輸入相關的問題

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

你的意思是該文件包含代碼語句(或部分語句)?也許看看'eval'函數... – isedev 2014-10-01 14:47:14

+0

非常感謝,它的工作。添加一個答案,所以我可以給你一些學分。 – Jiar 2014-10-01 14:49:51

回答

0

這似乎輸入文件中包含的代碼語句(或部分代碼語句)。

您可以使用內建函數eval執行語句,並將結果傳遞給graph_db.create函數。

但是,您應該意識到這允許執行任意代碼(即輸入文件成爲執行腳本的一部分),並且應該被視爲代碼的一部分(即不要使用不可信的輸入文件)。

0

您還可以檢查ast模塊。雖然我不知道這是否會在你的情況(重點煤礦)工作:

ast.literal_eval(node_or_string)

安全評估含有表達節點或Unicode或拉丁-1編碼字符串 一個Python表達式。 提供的字符串或節點可能只包含以下Python文字結構:字符串, 數字,元組,列表,字典,布爾值和無

這可用於安全地評估包含來自不受信任來源的Python表達式 的字符串,而不需要自己解析值。

因此,也許如果您對文件中的一些控制,只使用dict部分...

使用eval可以dangerous。請檢查此question and its answers