Python Sqlite3 Db > Excel'e Dönüştürme Yardım

from openpyxl import Workbook
import csv
import sqlite3
import os
baglan=sqlite3.connect("shop_data.db")
c=baglan.cursor()

data = c.execute("SELECT * FROM envanter")

with open('output.csv','w') as f:
    writer = csv.writer(f)
    writer.writerow(['Id', 'AlanKisi', 'AlindigiYer', 'Adet', 'Malzeme', 'Maliyet', 'Kime', 'Nereye', 'Tarih']), \
    writer.writerows(data)
    wb = Workbook()
    ws = wb.active
with open('output.csv','r') as f:
    for row in csv.reader(f): ws.append(row)
wb.save('liste.xlsx')
os.remove('output.csv')

Merhaba yukarıdaki kod ile oluşturulan excel dosyasında iki veri arasında boş satır oluyor bunu nasıl önleyebiliriz? veya bu neden kaynaklanıyor olabilir. Yardımcı olabilir misiniz ?

excel çıktısı aşağıdaki resimde görüldüğü gibi oluyor ?

Dosyalarin icinde ne oldugunu bilmeden bir sey soylemek zor. (bkz: Soru Sorarken Sıkça Düşülen Hatalar #7)

Kodu birbirinden bagimsiz parcalara ayirip sorunun nereden kaynaklandigini kendiniz gorebilirsiniz:

  • SELECT/data
  • writerows/output.csv
  • for/row
  • ws.append
  • wb.save
2 Beğeni

pyhton da yeniyim dediğinizi tam olarak anlayamadım… birçok konuya baktım nette ingilizce kaynaklarada baktım ama tam anlamıyla yardımcı olan bir içerik bulamadım… ‘dosyaların içinde ne olduğunu bilmeden’ demişsiniz buraya db dosyasını koyuyorum. biraz daha açıklayıcı olursanız çok memnun olurum…

python dosyası:

temp.py - 579 B

veri tabanı:
shop_data.db - 24 KB

teşekkürler

Pandas kullanarak daha basit bir şekilde veri tabanı üzerinden Excel’e aktarım yapabilirsiniz.

import pandas as pd
import sqlite3


conn = sqlite3.connect("shop_data.db")
query= """SELECT * FROM ENVANTER"""

pd.read_sql(query, conn).to_excel("deneme.xlsx" , index=False)

Şöyle yapıyorum.

Daha önce benimle aynı sorunu yaşayan olmuş mu diye bakıyorum…

Satırları görünce aklıma şu geldi… Kesin bir satır sonu işareti işleniyor bu nedenle bir satır daha aşağı iniyor neden olabilir diye biraz bakıştırdım…

csv - Empty space in between rows after using writer in python - Stack Overflow

The csv.writer writes \r\n into the file directly.

If you don't open the file in binary mode, it will write \r\r\n because on Windows text mode will translate each \n into \r\n.

edit:

For python 3 had to add newline="" to csv.writer as per this answer

Demiş.

Önce ben de acaba csv kaynağında bir sorun olabilir mi diye düşündüm. CSV normal ise,

geriye sadce dosya işlemleri kalıyor…

csv dosyasını şöyle açmayı önermiş.

python - Python3: writing csv files - Stack Overflow

open('eggs.csv', 'w', newline='')

Dokümantasyonu bu konuda uyarmış.

Buradan anladığım, delimiter ve new line için kurallara göre csv dosyası oluşturmak ve aynı şekilde excel e aktarmak gerekiyor.

Tabi bunlar kısa bir internet araştırması sonucu gördüklerim.

Kod denemedim. Bu nedenle deneyip sonuçları paylaşma kısmını size bırakıyorum.

Koda “calistirilinca bir seyler yapan dosya” olarak yaklasiyorsunuz, oysa ki oradaki her satirin ayri bir anlami var. Bu satirlarin neden bir araya geldiklerini ve hepsinin tek basina ne yaptigini, butunluk icinde ne yaptigini ogrenmeniz lazim.

Yukaridaki kod database’i okuyup (1) bir CSV dosyasina yaziyor (2), sonra CSV dosyasini okuyup (3) xlsx dosyasina yaziyor (4). Bu dort asamanin herhangi birinde bir problem olabilir. Cozebilmek icin once parcalara ayirip hatanin hangisinde oldugunu bulmaniz gerekiyor. Database’de bos satirlar varsa CSV dosyasina, oradan da xlsx dosyasina geciyor olabilirler mesela.

Neyse, kod su haliyle bu database ile sorunsuz calisiyor.

Sorun Excel’de muhtemelen. Microsoft, Excel’in diger alet ve kutuphaneler ile hafif uyumsuz olmasi icin aktif olarak ugrasiyor. OOXML formatini okuyabilen baska bir yazilim denemek isteyebilirsiniz.

LibreOffice bosluksuz aciyor bende.

1 Beğeni

Cevap verdiğiniz için teşekkür ederim. Tam istediğim gibi oldu.

aslında yukarda da belirtmiştim sorun csv dosyasını oluşturmasında. databaseden okuğu veriyi csv dosyasında satır boşluklu oluşturuyor bunun sonucunda excelde boşluklu oluyor. csv kısmını newline=’’ eklemem rağmen yine aynı şekilde çıktı verdi.

Yukariya bakarsaniz belirtmediginizi goreceksiniz.

O zaman kodu writer.writerows(data) satirinda kesebiliriz. Excel, LibreOffice ve openpyxl ile ugrasmaya gerek kalmaz, ve cevaplamasi cok daha hizli olur.

1 Beğeni

anladım deneyeceğim. ilginiz için teşekkür ederim.