2014-02-12 126 views
1

以下類的工作,我只是試圖操縱一流的工作對我來說:操縱寫文件類

這個類寫入文件:

class saveRegister : 
    def __init__(<--snip--> #defines some of the variables in the write function 

    def writeToFile(self,file) : 

     file.write(... #saves values in a specific format 

這使用上述類寫是我根據我的速度非常快於:

class Prep : 
    def writeToFilename(self, filename, registerNames) : 
     file = open(filename, 'w+') 
     for register in self.registers : #format here same as in my code 
      register.writeToFile(file) 
     file.close() 

我試圖重用他們的代碼在不同的文件,我的工作,但想不出什麼我做錯了。作爲一個快速測試,我想用寫這一個文件上面:

from mylib.saveFiles import saveRegister 

def saveStateValues(self, msg): 

    filename="/tmp/test.txt" 
    reg_test = {"HelloWorld":0x5} 

    file.open(filename, 'w+') 
    for register in reg_test: 
     register.saveRegister.writeToFile(file) 
    file.close() 

書面文件甚至沒有顯示,因爲當我以前在這裏使用的file.open()方法,這是奇怪的, 有用。我不能給你一個錯誤信息,因爲沒有(因爲各種令人討厭的原因,這被翻譯成Java - 但這不應該是重要的,所以當一些微妙的東西不起作用,它只是不告訴你) 。

+1

你的問題到底是什麼?什麼不行? –

+0

我很好奇,看看我的代碼是否有明顯的錯誤。它甚至不會打開一個文件供我編寫。 – fiz

+0

或者如果在python中有一些奇怪的規則,我無法寫入我從外部類調用的文件...那類事 – fiz

回答

1

我並不完全清楚你在做什麼,但在saveStateValues方法中有相當多的錯誤。

file是Python中的一個內置函數 - 它實際上是open的同義詞 - 並且沒有像file.open這樣的東西。該函數返回一個打開的文件,但是將其丟棄,而不是將其存儲在變量中:然後將函數本身傳遞到您的writeToFile,而不是剛打開的文件。

然後,你的循環還有更多的問題。你迭代reg_test這是一個字典,所以register的每個值都是該字典的關鍵。但出於某種原因,您將其視爲一個對象並嘗試訪問其saveRegister屬性。 saveRegister是您導入的類,所以沒有任何意義。你應該做的是在循環外部實例化一個saveRegister實例,然後將每個值傳遞給writeToFile方法。

全部放在一起:

file_to_write = open(filename, 'w+') 
save_register = saveRegister() 
for register in reg_test: 
    save_register.writeToFile(file_to_write, register) 
file_to_write.close() 

(我敢肯定,這是不完全正確的,因爲你不是從reg_test值,只是按鍵做任何事情,我們可能需要知道究竟saveRegister.writeToFile是什麼意思。)

+0

謝謝,我想我早早就有點太過於自己了 – fiz