2012-03-16 8 views
0

私はまだPythonとプログラミングには新しいので、私の無知を許してください。問題Pythonを使用して外部の.txtに書き込まれた関数の結果を取得

私がしようとしているのは、単語のリストを取って、ユーザーが自分のキーワードを入力し、それらを結合してから.txtファイルに出力させることです。私はこのコードを以下にまとめました。これはある程度達成されています。私の問題は、最初のキーワード( 'kw:')+ユーザーが入力したキーワードのみがkey_word.txtファイルに書き込まれるということです。私は私の関数で 'return'を使ってこの結果を得ます。私の関数で 'print'を使うと 'none' getは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

答えて

0

いくつかの問題があります(例えばジェネレータ式を使用して)これを行うには、多くのよりエレガントな方法があります

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() 

、:

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() 

あなたはおそらくしたい何がこれに近いものですしかし、これは少なくともあなたの例を働かせるべきです。

+0

私はまだこのコードの提案を使用して "None"をkeyword_file.txtに書き出しています。 –

+0

おっと、私も値を返すのを忘れてしまった!更新された例 – aquavitae

+0

はい!どうもありがとうございました。それは働くだけでなく、私が間違っていることを理解しています。 –

0

ここでの問題は、ファイルを開いて書き込みを行っていることです。混乱するように見えるかもしれませんが、ファイルへの書き込みとファイルへの追加は、2つの異なる操作です。

書き込みモードで開いているファイルに書き込むと、Pythonはファイルの先頭から書き込みを開始します。したがって、このファイルに既に存在するものはすべて上書きされる可能性があります。

append-mode '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

だから、私が使用する必要があります「」最初のコードではなくコードの内容全体を書き込むためには? –

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

+0

keyword_file.txtに書き込まれるものはすべて「なし」です。何がうまくいかないの? –

+0

私にとってうまく動作します。 search_kwは、元のsearch_kwとは異なる形式になっています。 – Asterisk

0

ユーザー入力をキャプチャする作業を行う前に、ファイルを開いたり閉じたりしているようです。

あなたは) 2を書き​​込むためのファイルを開き、あなたがそれにしたいすべてのユーザー情報を投げる) 1に必要 3)THENファイル

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

私はこのコードの提案を試みたが、このエラー '>ここ をあなたのキーワードを入力してボール トレースバック(最新の呼び出しの最後)に走った: text_file.writeで ファイル「無題6.py」、6行目、(」 s \ n "%word + keyword) TypeError:文字列フォーマット中にすべての引数が変換されない/' –

関連する問題