2012-04-20 83 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