2015-10-20 73 views
1

我是新來的Python,我想弄清楚幾件事情。我正在運行下面的代碼,我創建了兩個函數來打開和清除文件。AttributeError「truncate」

from sys import argv 

script, filename = argv 

def erase(text): 
    print open(text, "w") 
    text.truncate() 

piece = filename 

print "here I am erasing it" 
print erase(piece) 

的文件實際上被擦除,但我得到一個錯誤:

AttributeError: "str" object has no attribute to "truncate". 

,我進口存在和它有字符串的文件。問題是什麼?

回答

0
def erase(text): 
    print open(text, "w") 
    text.truncate() 

在該功能text是文件名,一個字符串。因此,在打印出由open()返回的文件對象後,您可以在文件名上而不是文件對象上調用truncate()

您必須將返回值open()存儲在一個變量中,然後在該對象上調用truncate()

甚至更​​好,使用with聲明:

def erase(filename): 
    with open(filename, "w") as f: 
     f.truncate() 

由於搶在評論中指出,開模w已經截斷文件,所以打開它後,你實際上並不需要做的任何東西:

def erase(filename): 
    with open(filename, "w") as f: 
     pass 
+2

不需要截斷任何東西。當你使用open(...,'w')時,它已經截斷了文件。 – Rob