2016-03-26 17 views
1

這是我的代碼是什麼樣子是的,這是另一個人「STR「對象有沒有屬性‘寫’的問題

import re 

fileIN = str(open('instructions.txt', 'w+')) 

contents = re.sub('a', 'x', fileIN) 

fileIN.write(contents) 

我想這個程序來代替字母‘A’字母」 X」的文件 'instructions.txt',像這樣:

a 
ab 
abc 

TO

x 
xb 
xbc 

然後將結果保存在同一文件中。但是,當我運行它,我得到以下錯誤信息:

AttributeError: 'str' object has no attribute 'write' 

我敢肯定,這是一個速戰速決,但我似乎無法找到它。

任何幫助將不勝感激!讓我知道是否需要提供更多信息。 (免責聲明:請原諒我發佈一個非常常見的問題,我查看了許多類似的線程,但我無法收集任何解決方案,我剛開始學習python一週前,我想也許我可以嘗試寫一個小程序來幫助我節省一些時間在工作中,不幸的是,這讓我沉溺於WAAAY太多的時間試圖弄清楚自己。)

(編輯:謝謝所有的評論和幫助。我認爲我的問題會陷入地獄深處,因爲我認爲這個問題太微不足道了,我覺得自己真的被編碼noob支持,我很高興我有這樣的經歷。)

+0

您認爲'fileIN.write(contents)'的作用是什麼? – jwodder

+1

'fileIn'應該是一個字符串還是不是?如果是的話,你爲什麼期望它有'write()'屬性?如果沒有,爲什麼給它分配一個字符串? – Goyo

+1

對於以下答案中描述的較大錯誤,我們並沒有實現,但我懷疑「」w +「不是您想要使用的文件模式。任何''w''模式都會立即截斷文件,這使得嘗試讀取其內容有點無用。我想如果你要寫,然後重新閱讀文件的某些部分,這可能會很有用,但這不是你正在做的。你可能想要''r +「',它不會截斷,並且可以讓你按任何順序讀寫。儘管你可能想在自己的閱讀和寫作之間進行截斷(如果新內容比舊的內容短) – Blckknght

回答

0

爲此,不需要import re。內置的replace()會做。

with open("instructions.txt", "r+") as f: 
    data = f.read().replace("a","x") 
    f.seek(0) 
    f.write(data) 
+0

嘿,謝謝你的回答。該解決方案完美運作! – Jennifer

+0

@Jennifer Great,不客氣:) – jDo

0

你爲什麼使用str ?:

with open('file', 'r') as f: 
    text = f.read() 

with open('file', 'w') as f: 
    f.write(re.sub('a', 'x', text)) 
-1

確保不要摻和進去的文件對象和字符串:

import re 
f = open('instructions.txt', 'w+') 
contents = re.sub('a', 'x', f.read()) 
f.write(contents) 
1

您正在打開一個文件:

open('instructions.txt', 'w+') 

於是馬上把它變成一個字符串而不先保存對文件對象的引用,並保存對該文件的字符串內容的引用:

fileIN = str(...) 

然後你在這個字符串進行替換:

contents = re.sub('a', 'x', fileIN) 

,並嘗試寫一些東西。

fileIN.write(contents) 

fileIN有,在某個時間沒有意義的,一直到一個文件對象的引用。它只是一個字符串,不能寫入。如果你想保持對文件的訪問對象的引用保存到它,而不是合併的一切:

fileIN = open('instructions.txt', 'w+') 

contents = fileIN.read() 
contents = re.sub('a', 'x', contents) 

然後,您將能夠寫入由fileIN引用的文件對象。

+0

謝謝你寫出詳細的解釋。我試了一下,但它並沒有工作,但至少現在我明白我可能出錯了。雖然我已經用另一種方法解決了我的問題,但我會嘗試根據您的解釋達成解決方案。 – Jennifer

0

它告訴你,沒有方法寫在字符串對象上。您需要在文件對象上調用寫入。

fileIN = open('instructions.txt', 'w+') 
contents = fileIN.read() 
fileIN.write(re.sub('a', 'x', contents)) 
+0

我懷疑這會直接刪除文件內容 – jDo

相關問題