Python 2.7.11将输出写入文本文件

时间:2016-03-22 20:49:11

标签: python python-2.7

我是python的新手,我正在试图弄清楚如何将结果写入文本文件。这是我的代码:

from os import getenv
import sqlite3

conn = sqlite3.connect(getenv("APPDATA") + "\..\Local\...sanitized")
conn3 = sqlite3.connect(getenv("APPDATA") + "\..\Local\...sanitized")
conn1 = sqlite3.connect(getenv("APPDATA") + "\..\Local\...sanitized")
cursor3 = conn3.cursor()
cursor1 = conn1.cursor()
cursor = conn.cursor()
cursor.execute('SELECT ...sanitized')
for result in cursor.fetchall():
    ...sanitized
    if password:
        print "Site: " + result[0]
        print 'Username: ' + result[1]
        print 'Password: ' + password
        print '---------------------------------------------'
cursor3.execute("...sanitized") 
print("fetchall:")
result = cursor3.fetchall() 
for r in result:
    print(r)

cursor1.execute("...sanitized") 
print("fetchall:")
result = cursor1.fetchall() 
for r in result:
    print(r)

我在代码的开头尝试了f = open(' output.txt')并放置了

f.write(r) # and I tried 
f.write(result) # after defining it near bottom as these are my variables 
f.close()# :(

追溯说它期待一个字符串?

有人可以帮忙解释一下打印的内容(这里)吗?我正在努力把握这些概念,但还没有完全明白

由于

3 个答案:

答案 0 :(得分:5)

首先,您要确保打开文件进行编写:

f=open("output.txt","w")

然后你可以使用:

for r in result:
    print >> f, r

在脚本结束时,请确保使用:

f.close()

或者,您可能需要将r投射到字符串print >> f, str(r)

答案 1 :(得分:1)

正如其他人所提到的,您需要使用参数'w'指定要写入文件。

最佳做法是在打开文件时使用with。它将显着确保您的文件正确关闭,即使有例外。

with open('output.txt', 'w') as f:
    for r in result:
        f.write(str(r))

答案 2 :(得分:0)

似乎result是一个列表,而write需要一个字符串。因此,您可以尝试使用f.write(result)或者获取与脚本完全相同的输出,而不是f.write(str(result))

for r in result:
    f.write(r)

或者,您可以导入然后覆盖Python 3中的print函数,以便print的所有内容自动写入文件:

from __future__ import print_function

_print = print # reference to original print function
outfile = open("output.txt", "w") # file to write output to, mode is 'w' for writing
def print(*args, **kwargs):
    """new print function always writing to file"""
    _print(*args, file=outfile, **kwargs)

print("foo")
print("bar", end=" ")
print("blub")

outfile.close()

或类似地,覆盖sys.stdout,然后通常只使用print

import sys
sys.stdout = open("output.txt", "w")