[带有Tkintertable的Python中带有空行的CSV文件

问题描述 投票:0回答:1

我将所有数据填入表格,然后导出文件(CSV)。到目前为止还可以。但是,当我打开CSV文件时,我注意到我填充的行之间有空行。怎么解决呢?运行代码,填写表格,导出并查看文件以了解。非常感谢你。上帝保佑你。

from tkintertable import TableCanvas, TableModel
from tkinter import *

root=Tk()
t_frame=Frame(root)
t_frame.pack(fill='both', expand=True)

table = TableCanvas(t_frame, cellwidth=60, thefont=('Arial',12),rowheight=18, rowheaderwidth=30,
                    rowselectedcolor='yellow', editable=True)

table.show()

root.mainloop()

look the empty rows in the CSV file

python tkinter tkintertable
1个回答
1
投票

如果您在记事本或其他基本文本编辑器中打开CSV文件,则会看到该数据已保存,每行数据之间都有空格。因为EXCEL会在每行中读取CSV,所以它将始终以这种方式导入EXCEL。

[您唯一能做的就是手动输入并从CSV中删除行,建立一个宏以在事件发生后为您清除,或编辑发生问题的tkintertable库。

[tkintertable的GitHub使用页面]似乎没有导出到CSV的任何详细信息,此问题可以解决。我猜这个库如何处理数据只是一个问题。

即使添加运行命令以导出的按钮,您也会遇到相同的问题。

def export_to_csv():
    table.exportTable()

Button(root, text='test CSV', command=export_to_csv).pack()

Usage

enter image description here

更新:

[进行一些挖掘并认识到tkintertable使用csv librarty写入csv之后,我对使用csv库写入csv的同一问题进行了一些搜索,发现了这篇文章(csv.write skipping lines when writing to csv)。在那篇文章中,我在tkintertable库中进行了一些挖掘,以查找编写的位置以及所发现的内容。

在数据之间插入新行似乎是csv库如何写入数据的结果。如果我们进行深入研究,您会发现将表格写入CSV的tkintertable类称为ExportTableData。该类如下:

class TableExporter:
    def __init__(self):
        """Provides export utility methods for the Table and Table Model classes"""

        return

    def ExportTableData(self, table, sep=None):
        """Export table data to a comma separated file"""

        parent=table.parentframe
        filename = filedialog.asksaveasfilename(parent=parent,defaultextension='.csv',
                                                  filetypes=[("CSV files","*.csv")] )
        if not filename:
            return
        if sep == None:
            sep = ','
        writer = csv.writer(open(filename, "w"), delimiter=sep)
        model=table.getModel()
        recs = model.getAllCells()
        #take column labels as field names
        colnames = model.columnNames
        collabels = model.columnlabels
        row=[]
        for c in colnames:
            row.append(collabels[c])
        writer.writerow(row)
        for row in recs.keys():
            print(row)
            writer.writerow(recs[row])
        return

如果我们更新此行:

writer = csv.writer(open(filename, "w"), delimiter=sep)

加入lineterminator = '\n',您会发现问题已消失:

writer = csv.writer(open(filename, "w"), delimiter=sep, lineterminator = '\n')

结果:

enter image description here

记住编辑库可能不是一个好主意,但在这种情况下,我认为这是您唯一的选择。

要进入此类,您需要在Tables_IO.py库中打开名为tkintertable的python文件。

如果使用的是PyCharm,则可以使用CTRL +左键单击浏览库文件。

首先按Ctrl键并单击导入名称enter image description here。然后,您将按住Ctrl键并单击导入名称enter image description here。然后,您将搜索一个名为exportTable的类方法,然后在该方法内按住Ctrl键并单击enter image description here。这将带您进入您可以编辑以解决问题的上述课程。

[请注意不要编辑任何其他内容,因为您很容易破坏库,并且在发生这种情况时需要重新安装它。

© www.soinside.com 2019 - 2024. All rights reserved.