2012-03-16 17 views
0

爲了說明問題,我仍然對Python和編程有所瞭解,所以請原諒我的無知。使用Python寫入外部.txt的函數結果出錯問題

我想要做的是拿出單詞列表,讓用戶輸入自己的關鍵字並將兩者結合起來,然後將它們打印到.txt文件中。我在下面拼湊了這些代碼,它在一定程度上實現了這一點。我的問題是,只有第一個關鍵字('kw:')+用戶輸入的關鍵字被寫入key_word.txt文件。我通過在函數中使用'return'來獲得這個結果。如果我在我的函數'none'中使用'print',則將其寫入key_word.txt文件。

如何獲取我的整個關鍵字列表('search_kw =')+將用戶輸入的關鍵字寫入.txt文件。

search_kw = ('kw: ', 'kw1: ', 'kw3 ', 'kw4: ', 'kw5: ', 'kw6: ', 'kw7: ', 'kw8: ') 

keyword = raw_input('Enter your keyword here\n > ') 

def add_keyword(): 
    for word in search_kw: 
     return word + keyword 

text_file = open("/Users/home/Projects/keyword_file.txt", "w") 
text_file.write("%s" % search_kw) 
text_file.close() 

add_keyword() 
+0

你可能有興趣使用內置ConfigParser:http://docs.python.org/library/configparser.html#examples – shimofuri 2012-03-16 15:22:36

回答

0

有幾個問題:

search_kw = ('kw: ', 'kw1: ', 'kw3 ', 'kw4: ', 'kw5: ', 'kw6: ', 'kw7: ', 'kw8: ') 

keyword = raw_input('Enter your keyword here\n > ') 

def add_keyword(): 
    for word in search_kw: 
     # Leave the function, breaking the loop after the first iteration 
     return word + keyword 

text_file = open("/Users/home/Projects/keyword_file.txt", "w") 
# Write search_kw before adding any keywords to it 
text_file.write("%s" % search_kw) 
text_file.close() 

# Only calling add_keyword and the end, and not using the return value 
add_keyword() 

你可能想要的是更接近於這樣的:

def add_keyword(): 
    keywords = [] 
    for word in search_kw: 
     keywords.append(word + keyword) 
    return keywords 

search_kw = add_keyword() 
text_file = open("/Users/home/Projects/keyword_file.txt", "w") 
text_file.write("%s" % search_kw) 
text_file.close() 

有這樣做的許多更優雅的方式(例如使用生成器表達式)但這應該至少讓你的例子工作。

+0

我仍然只使用此代碼建議將「None」寫入keyword_file.txt。 – 2012-03-17 05:56:39

+0

哎呀,我忘了返回值!示例已更新。 – aquavitae 2012-03-17 06:15:07

+0

是的!非常感謝你。它不僅有效,而且我明白我做錯了什麼。 – 2012-03-17 06:19:30

0

這裏的問題在於您打開文件進行寫入。這可能看起來很混亂,但是寫入文件並追加到文件是兩種不同的操作。

當您寫入以寫入模式打開的文件'w'時,Python將從文件的開頭開始寫入,因此該文件中存在的任何內容都可能被覆蓋。

當您寫入以追加模式'a'打開的文件時,Python知道文件中還有其他東西要保留,並在當前存在的東西后寫入文件。

,請嘗試打開您在附加模式文件:

text_file = open("/Users/home/Projects/keyword_file.txt", "a") 
0

你寫的列表,而不是字符串

text_file.write( 「%s的」 %search_kw)

嘗試search_kw [X ]

0

您打開文件進行寫入。寫作打開文件並從頭開始(擦除所有內容)。追加從最後開始。在追加模式打開一個文件,可以使用:

f = open('/path/to/file', 'a')

要追加到一個文件,你仍然使用f.write()功能。

+0

所以,我需要使用「A」爲了讓它編寫代碼的全部內容而不僅僅是開始? – 2012-03-16 14:51:10

0

您的案例的正確數據結構似乎是字典。

search_kw = {'kw': '', 'kw1': '', 'kw3': '', 'kw4': '', 'kw5': '', 'kw6': '', 'kw7': '', 'kw8': ''} 

keyword = raw_input('Enter your keyword here\n > ') 



def add_keyword(): 
    text_file = open("keyword_file.txt", "w") 
    for key,_ in search_kw.items(): # iterate over (key,value) pairs in the dictionary 
     search_kw[key] = keyword # associate new value with each key 
     text_file.write("%s: %s\n" % (key, search_kw[key])) # write (key,value) pairs to a file 
    text_file.close() 

add_keyword() 
+1

同意...字典可能是一個更好的數據結構。你可以很好地保存鍵和值,然後做任何你想要的東西。 – fitzgeraldsteele 2012-03-16 15:07:10

+0

所有寫入keyword_file.txt的文件都是「None」。出了什麼問題? – 2012-03-17 05:43:08

+0

適合我。請注意,search_kw具有與原始search_kw不同的形式。 – Asterisk 2012-03-17 08:08:20

0

它看起來像你正在打開和關閉你正在寫的文件,在你做任何捕獲用戶輸入的工作。

你需要 1)打開文件進行寫入 2)拋出你想進入它的所有用戶信息 3)然後關閉該文件

Python的with操作者使文件打開的護理/關閉的你,就像這樣:

search_kw = ('kw: ', 'kw1: ', 'kw3 ', 'kw4: ', 'kw5: ', 'kw6: ', 'kw7: ', 'kw8: ') 

with open('keywordfile.txt','w') as text_file: 
    for word in search_kw: 
     keyword = raw_input('Enter your keyword here\n > ') 
     text_file.write("s\n" % word + keyword) 
+0

我想這個代碼建議,但遇到了這個錯誤 '在這裏輸入關鍵字 >球 回溯(最近通話最後一個): 文件「無題6.py」,第6行,在 text_file.write(」 s \ n「%word +關鍵字) TypeError:並非在字符串格式化過程中轉換的所有參數/ – 2012-03-17 05:44:16