【问题标题】:CSV file with some empty rows in Python with Tkintertable带有 Tkintertable 的 Python 中带有一些空行的 CSV 文件
【发布时间】:2019-12-23 12:50:32
【问题描述】:

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

【问题讨论】:

  • 我有一个解决方案可以解决您的问题。请查看我的更新答案。
  • 哇!!!有效!很棒的工作!非常感谢!
  • 很高兴为您提供帮助。如果我的帖子解决了您的问题,请选中答案旁边的复选标记以表明您的问题已解决。
  • 请不要在帖子中添加对话材料。人们普遍期望在这里坚持技术写作。谢谢!
  • Leonardo,请停止在帖子末尾的闲聊材料中进行编辑。社区一致认为此类材料不属于本网站 -- meta.stackoverflow.com/questions/260776/…

标签: python tkinter tkintertable


【解决方案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

更新:

在进行了一些挖掘并意识到 tkintertable 使用 csv 库写入 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')

结果:

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

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

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

首先 Ctrl+单击导入名称 。然后您将 Ctrl+单击导入名称。然后您将搜索一个名为exportTable 的类方法,在该方法中您将Ctrl+单击。这将带您进入上述课程,您可以对其进行编辑以解决问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    相关资源
    最近更新 更多