带有Tkintertable的Python中带有一些空行的CSV文件

带有Tkintertable的Python中带有一些空行的CSV文件,python,tkinter,tkintertable,Python,Tkinter,Tkintertable,我将表格作为任何数据填写,然后导出文件(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

我将表格作为任何数据填写,然后导出文件(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()

如果在记事本或其他一些基本文本编辑器中打开CSV文件,您将看到数据在每行数据之间以空格保存。因为EXCEL每行读取一个CSV,所以它总是以这种方式导入EXCEL

您真正能做的只有手动进入CSV并从CSV中删除行,创建一个宏在事后为您清理行,或者编辑发生问题的
tkintertable

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

即使添加一个运行命令导出的按钮,也会遇到同样的问题

def export_to_csv():
    table.exportTable()

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

更新:

在做了一些挖掘工作并意识到
tkintertable
使用
csv
库写入csv后,我在谷歌上搜索了使用
csv
库写入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')
结果:

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

要访问该类,您需要在
tkintertable
库中打开名为
Tables\u IO.py
的python文件

如果您使用的是PyCharm,则可以通过按住CTRL键并单击鼠标左键在库文件中导航

首先按住Ctrl键并单击导入名称。然后按住Ctrl键并单击导入名称。然后,您将搜索名为
exportTable
的类方法,并在该方法中按住Ctrl键并单击。这将把你带到上面提到的类,你可以编辑它来解决这个问题

def export_to_csv():
    table.exportTable()

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

请注意不要编辑任何其他内容,因为您可能很容易破坏您的库,如果发生这种情况,您需要重新安装它。

如果您在记事本或其他一些基本文本编辑器中打开CSV文件,您将看到数据在每行数据之间以空格保存。因为EXCEL每行读取一个CSV,所以它总是以这种方式导入EXCEL

您真正能做的只有手动进入CSV并从CSV中删除行,创建一个宏在事后为您清理行,或者编辑发生问题的
tkintertable

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

即使添加一个运行命令导出的按钮,也会遇到同样的问题

def export_to_csv():
    table.exportTable()

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

更新:

在做了一些挖掘工作并意识到
tkintertable
使用
csv
库写入csv后,我在谷歌上搜索了使用
csv
库写入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')
结果:

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

要访问该类,您需要在
tkintertable
库中打开名为
Tables\u IO.py
的python文件

如果您使用的是PyCharm,则可以通过按住CTRL键并单击鼠标左键在库文件中导航

首先按住Ctrl键并单击导入名称。然后按住Ctrl键并单击导入名称。然后,您将搜索名为
exportTable
的类方法,并在该方法中按住Ctrl键并单击。这将把你带到上面提到的类,你可以编辑它来解决这个问题

def export_to_csv():
    table.exportTable()

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

请注意不要编辑任何其他内容,因为您可能很容易破坏您的库,如果发生这种情况,需要重新安装。

我有一个解决方案可以解决您的问题。请看我的最新答案。哇!!!成功了!棒极了!非常感谢你!很乐意帮忙。如果我的帖子解决了你的问题,请选中答案旁边的复选标记,表明你的问题已经解决。请不要在帖子中添加对话材料。人们普遍期望在这里坚持技术写作。谢谢莱昂纳多,请停止编辑文章末尾的闲聊材料。社区一致认为此类材料不属于此网站-。我有一个解决方案可以解决您的问题。请看我的最新答案。哇!!!成功了!棒极了!非常感谢你!很乐意帮忙。如果我的帖子已经解决了你的问题,请选中答案旁边的复选标记,以表明你的问题已经解决。请不要在文章中添加对话材料