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 ?
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…
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…
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,
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.
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.
O zaman kodu writer.writerows(data) satirinda kesebiliriz. Excel, LibreOffice ve openpyxl ile ugrasmaya gerek kalmaz, ve cevaplamasi cok daha hizli olur.