2012-04-20 12 views
-3

私は次のスクリプトを持っています。誰も助けてくれたおかげで、結果が画面に表示されるようになりました。私はまた、この同じ画面出力を取り、それをテキストファイルにダンプするもう一つのステップを追加しようとしています。ファイルに結果を書き出すPython

私は、これはfile.write()

で行われますが、ファイルに結果から情報を書き込むために取得する方法を知ってはいけないと思いました。助けてください、私は非常にPythonに新しいので、私は少し失われて、本からそれを理解しようとしています。

これで、クエリによって返されたものの最後の行だけが表示されるようになりました。最終的に、それはおそらくちょうど1行を印刷し、その後、私はそれがフェッチ全部または

import adodbapi 

# Connect to the SQL DB  
conn = adodbapi.connect("Provider=SQLOLEDB; SERVER=xx.x.xx.x; Initial Catalog=master_db;User Id=user; Password=pass; ") 
curs = conn.cursor() 

# Execute SQL procedure things_referencing"  
curs.execute('util.things_procedure',) 
results = curs.fetchall() 

for row in results: 
    print row 

f = open('test.txt', 'w') 
s = str(row) 
f.write(s) 
f.close() 

conn.close() 
+1

これはpython sqlチュートリアルの例です。ここに尋ねる前に実際にファイルにデータを書き込もうとしましたか? – jdi

+1

@Lattyware:私は最終的に私自身の特定の答えをまとめる必要があるまで、同じ素晴らしいブログをリンクし続けました:http://writemycode.net :-) – jdi

答えて

7

の結果「結果」タプルの各「行」は、レコードのタプルでの全体を印刷する必要が何度も何度もそれを上書きします。どのようにこのデータをフォーマットしたいのはあなた次第ですが、最も基本的なレベルでは、あなたはファイルを読み書きする方法についてはPythonのドキュメント読んで行く今str(row)

で文字列に変換することができます
http://docs.python.org/tutorial/inputoutput.html

更新

あなたの新しいコードの例を参照すると、あなたはループのためにやって、各行を印刷した後、あなたは、ファイルを開いているだけの行はループのためにあなたから割り当てられた最後の値を書いています。あなたのforループは、あなたが次に書く操作とは無関係です。 rowにはすべての値がresultsに割り当てられていましたが、最後に割り当てられた値のみを1回使用しました。

何をすべきことは、最初の行のすべての値を足す、あなたのループを開始し、その後、ファイルを開いている:

with open('test.txt', 'w') as f: 
    for row in results: 
     print row 
     f.write("%s\n" % str(row)) 

あなたがwithコンテキストを使用する場合は、あなたが離れると、それは自動的にあなたのためのファイルを閉じますその範囲。 strを使用して文字列に変換するだけでなく、文字列の書式設定を使用して改行文字を追加することができます。

+0

私はそれをstrに変換して今すぐ印刷しています実際には行単位で印刷してお互いを上書きしていると仮定して、クエリ結果の最後の行だけを表示します。これを防ぐにはどうしたらいいですか? – user1304228

+0

@ user1304228:あなたの試行した内容と現在失敗している内容で質問を更新してください。 – jdi

+0

f = openなどはすべて1行に出力されますが、コード内の行には – user1304228

1

これは実際にfile.writeで行われますが、まずファイルを開く必要があります。したがって、以下のようなforループを修正します

f = open('/path/to/file', 'w') 
for row in results: 
    f.write(row) 
f.close() 
+0

これはクラッシュします。行はタプルです。 – jdi

+0

はい、私はこれを試してみましたが、それは印刷されませんでした。タプルではないので書きますか?またはそれをタプルとして書く方法があります – user1304228

+0

@ user1304228:私の答えを読んでください – jdi

関連する問題