[Python] Zapis do pliku

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.

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.

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.

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

@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).