2012-04-20 80 views
-3

我有以下腳本,感謝大家的幫助幾乎完成,因爲它現在將結果打印到屏幕上。我還希望添加一個步驟,它將採用相同的屏幕輸出並將其轉儲到文本文件。Python將結果寫入文件

我認爲這與file.write()

做,但不知道如何得到它來寫,從結果到一個文件中的信息。請大家幫忙,我對python非常陌生,所以我有點失落,試圖從書中找出它。

這現在打印出來,但只是查詢返回的最後一行。最終它可能只是打印一條線,然後一次又一次地改寫它,所以我需要它來打印整個的獲取所有或在「結果」的結果

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 2012-04-20 17:37:15

+1

@Lattyware:我曾經保持鏈接的同一個真棒博客,直到我最後需要總結我自己的具體答案:http://writemycode.net :-) – jdi 2012-04-20 17:46:36

回答

7

每個「行」的元組是一個記錄的元組。你怎麼想格式化這個數據是你的,但在最基本的層面上,你可以將其轉換爲字符串str(row)

現在去閱讀如何閱讀python文檔和寫入文件:
http://docs.python.org/tutorial/inputoutput.html

更新

參照新的代碼示例,您是循環做並打印每一行,然後你打開一個文件,只寫入最後的值該行從您指定的for循環。您打印的循環與您之後的寫入操作無關。 row已被分配每個值results,但您只使用了最後一次分配的值一次。

你應該做的是先打開該文件,然後啓動循環,書面方式排的每個值:

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

如果使用with情況下,它會自動一旦你離開關閉該文件爲你那個範圍。您可以使用字符串格式並添加換行符,而不是僅使用str轉換爲字符串。

+0

好吧,我把它轉換成一個str,現在打印但只有查詢結果的最後一行,實際上假設它正在逐行打印並相互覆蓋....任何方式來防止這種情況? – user1304228 2012-04-20 18:09:49

+0

@ user1304228:請更新你的問題與你已經嘗試過什麼,現在失敗。 – jdi 2012-04-20 18:12:46

+0

已更新,雖然f = open等全部打印在一行中,但在我的代碼中它們各自在行 – user1304228 2012-04-20 18:17:42

1

它確實是用file.write完成的,但是你必須先打開文件。所以你可以修改for循環,如下所示

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

這會崩潰。行是一個元組。 – jdi 2012-04-20 17:42:44

+0

是的,我只是試過這個,它沒有打印出來...你能分解出它是一個元組,所以它寫道?或者有沒有辦法把它寫成一個元組 – user1304228 2012-04-20 17:57:44

+0

@ user1304228:閱讀我的答案 – jdi 2012-04-20 18:07:37