2012-05-09 54 views
0

剛剛學習Python並試圖編寫一個腳本,允許用戶更改文本中的行。python寫文件的語法錯誤

回溯(最近通話最後一個): 文件「textedit.py」,10號線,在 f.write(出於某種原因,提示用戶時,爲線路輸入的東西來代替我得到這個錯誤一號線) AttributeError的: '海峽' 對象沒有屬性 '寫'

和腳本本身:

f = raw_input("type filename: ") 
def print_text(f): 
    print f.read() 
current_file = open(f) 
print_text(current_file) 
commands = raw_input("type 'e' to edit text or RETURN to close the file") 

if commands == 'e': 
    line1 = raw_input("line 1: ") 
    f.write(line1) 
else: 
    print "closing file" 
    current_file.close() 

回答

1

你應該做的事:

current_file.write(line1) 

發生了什麼事?您將文件名存儲在f中,然後用它打開一個文件對象,該對象存儲在current_file中。

錯誤消息試圖完全告訴你:f是一個字符串。字符串沒有write方法。在第10行上,您嘗試調用存儲在變量f中的對象上的方法write。它不能工作。

學習編程將涉及學習閱讀錯誤消息。別擔心。隨着你的前進,它變得更容易。

+0

非常感謝!我非常喜歡學python。 – alkopop79

4

更改此:

f.write(line1) 

成這樣:

current_file.write(line1) 

錯誤發生,因爲你在訪問f,如果它是一個文件,但它僅僅是由給定一個文件名用戶。打開的文件存儲在current_file變量中。

此外,您正在閱讀模式下打開文件。看看open()'s documentation

open(name[, mode[, buffering]])

The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending (which on some Unix systems means that all writes append to the end of the file regardless of the current seek position). If mode is omitted, it defaults to 'r' .

1

改變這一點:

current_file = open(f) 

這一個:

current_file = open(f, 'w') 

這:

f.write(line1) 

到:

current_file.write(line1) 
+0

你爲什麼給我-1? –

+1

+1表示「w''模式。也許downvote來之前,你添加第二個建議? – Tadeck

0

你試圖writef這是一個字符串(包含raw_input()結果),而你應該想必對寫入文件。此外,它被認爲更pythonic和更好的做法是使用with聲明來打開文件,因此您可以確保在任何可能的情況下(包括意外錯誤)都會關閉文件:

python 3。X:

def print_from_file(fname): 
    with open(fname, 'r') as f: 
     print(f.read()) 

f = input("type filename: ") 
with open(f, 'w') as current_file: 
    print_from_file(f) 
    commands = input("type 'e' to edit text or RETURN to close the file") 
    if commands == 'e': 
     line1 = input("line 1: ") 
     current_file.write(line1) 
    else: 
     print("closing file") 

蟒蛇2.x的:

def print_from_file(fname): 
    with open(fname, 'r') as f: 
     print f.read() 

f = raw_input("type filename: ") 
with open(f, 'w') as current_file: 
    print_from_file(f) 
    commands = raw_input("type 'e' to edit text or RETURN to close the file") 
    if commands == 'e': 
     line1 = raw_input("line 1: ") 
     current_file.write(line1) 
    else: 
     print "closing file"