Witam.
Jak zapisać zawartość zmiennej do pliku.
Próbowałem plik.write(zmienna), ale w ten sposób się nie da.
Potrzebuje zapisać wynik zapytania mysql do pliku, aby go później “obrobić”. Lub jak zapisać wynik zapytania SHOW CREATE TABLE w mysql ?
Proszę o pomoc.
Z góry dziękuje.
nr47
(Sawyer47)
12 Maj 2012 13:22
#2
Najlepiej pokaż kod. Jeśli wspominasz o SQL to pewnie używasz jakiejś biblioteki - nie napisałeś jakiej.
Używam biblioteki MySQLdb.
import MySQLdb
print “Podaj login”
login = raw_input()
print “Podaj haslo”
haslo = raw_input()
conn = MySQLdb.connect(“localhost”,login,haslo)
c = conn.cursor()
zapytanie = ("SHOW CREATE table "+tabela)
c.execute(zapytanie)
wynik = c.fetchall()
plik = open(’/tmp/tabela’, ‘w’)
plik.write(wynik)
działa natomiast, gdy wpisze tak:
plik.write(‘wynik’) , ale nie o to chodzi.
iluzion
(Krystian Rosinski)
12 Maj 2012 15:22
#4
To jest pytanie?
Zdanie zaczynające się od “lub”?
Chyba nie zależy ci na odpowiedziach, bo wszystkie informacje trzeba od ciebie wyciągać. Przydałby się jeszcze komunikat o błędzie.
import MySQLdb
print "Podaj login"
login = raw_input()
print "Podaj haslo"
haslo = raw_input()
conn = MySQLdb.connect("localhost",login,haslo)
c = conn.cursor()
zapytanie = ("SHOW CREATE table "+tabela)
c.execute(zapytanie)
wynik = c.fetchall()
plik = open('/tmp/tabela', 'w')
plik.write(wynik)
działa natomiast, gdy wpisze tak:
plik.write('wynik') , ale nie o to chodzi.
Dlaczego mieszasz kod z komentarzami nie używając “pythonowych” komentarzy? Dlaczego nie używasz znaczników code?
plik.write(wynik)
Jakiego typu jest wynik
?
wynik = c.fetchall()
Otrzymujesz krotkę (tuple). Szklana kula podpowiada mi, że dostajesz tego typu błąd.
>>> f.write(('a', 'b'))
Traceback (most recent call last):
File "", line 1, in
f.write(('a', 'b'))
TypeError: expected a character buffer object
Proponuję na początek przeczytać Reading and Writing Files . Na końcu rozdziału jest mowa o serializacji obiektów przy pomocy modułu pickle .
grzelix
(Grzelix)
12 Maj 2012 15:32
#5
ja nie programuje w Pythonie ale patrząc na to co zostało przedstawione i z pomocą google mogę zasugerować taką odpowiedź:
for row in result:
c.writerow(row)
a tutaj link z uzasadnieniem
http://stackoverflow.com/questions/4613 … ield-names
iluzion
(Krystian Rosinski)
12 Maj 2012 15:54
#6
@grzelix
Ten kod będzie działał, ale dane w pliku mogą nie nadawać się do dalszej “obróbki”, bo zostaną zapisane jako tekst, na dodatek wyniki będą “sklejone” (chyba, że skorzysta się z modułu csv jak w podanym linku - dobry sposób jeśli “obróbka” może być wykonana np. w Excelu).
f = open('test.txt', 'w')
wynik = ('wynik_1' ,'wynik_2', 'wynik_3')
for i in wynik: f.write(i)
f.close()
Wynik:
wynik_1wynik_2wynik_3
Oczywiście można zapisać tak:
for i in wynik: f.write(i + ' ')
lub
for i in wynik: f.write(i + ', ')
ale w tym wypadku ostatni znak będzie dołączony również na końcu.
wynik_1, wynik_2, wynik_3,
Dzięki wielkie za pomoc!
Działa tak:
pickle.dump(zmienna, plik).