Python 中带有 Tkintertable 的一些空行的 CSV 文件
CSV file with some empty rows in Python with Tkintertable
我填写 table 作为任何数据,然后导出文件 (CSV)。好的到目前为止。但是当我打开 CSV 文件时,我注意到我填充的行之间有空行。
如何解决? 运行代码,填table,导出看文件就明白了。
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
如果您在记事本或其他一些基本的文本编辑器中打开 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()
更新:
在做了一些挖掘并意识到 tkintertable
使用 csv
librarty 写入 csv 之后,我对使用 csv
库写入 csv 的相同问题进行了谷歌搜索,并且找到了这个 post (csv.write skipping lines when writing to csv)。有了那个 post 我在 tkintertable
库中进行了一些挖掘以找到写入发生的位置,这就是我找到的。
在数据之间写入新行似乎是 csv
库写入数据的结果。如果我们深入挖掘,您会发现将 table 写入 CSV 的 tkintertable
class 称为 ExportTableData
。即class如下:
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')
结果:
请记住,编辑库可能不是一个好主意,但对于这种情况,我认为这是您唯一的选择。
要获得此 class,您需要打开 tkintertable
库中名为 Tables_IO.py
的 python 文件。
如果您使用的是 PyCharm,则可以使用 CTRL+左键单击浏览库文件。
首先 Ctrl+单击导入名称 . Then you will Ctrl+Click on the import name . Then you will search for a class method called exportTable
and inside that method you will Ctrl+Click 。这将带您到上面提到的 class,您可以编辑它来解决问题。
请注意不要编辑任何其他内容,因为您很容易破坏您的库,如果发生这种情况,您将需要重新安装它。
我填写 table 作为任何数据,然后导出文件 (CSV)。好的到目前为止。但是当我打开 CSV 文件时,我注意到我填充的行之间有空行。 如何解决? 运行代码,填table,导出看文件就明白了。
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
如果您在记事本或其他一些基本的文本编辑器中打开 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()
更新:
在做了一些挖掘并意识到 tkintertable
使用 csv
librarty 写入 csv 之后,我对使用 csv
库写入 csv 的相同问题进行了谷歌搜索,并且找到了这个 post (csv.write skipping lines when writing to csv)。有了那个 post 我在 tkintertable
库中进行了一些挖掘以找到写入发生的位置,这就是我找到的。
在数据之间写入新行似乎是 csv
库写入数据的结果。如果我们深入挖掘,您会发现将 table 写入 CSV 的 tkintertable
class 称为 ExportTableData
。即class如下:
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')
结果:
请记住,编辑库可能不是一个好主意,但对于这种情况,我认为这是您唯一的选择。
要获得此 class,您需要打开 tkintertable
库中名为 Tables_IO.py
的 python 文件。
如果您使用的是 PyCharm,则可以使用 CTRL+左键单击浏览库文件。
首先 Ctrl+单击导入名称 exportTable
and inside that method you will Ctrl+Click
请注意不要编辑任何其他内容,因为您很容易破坏您的库,如果发生这种情况,您将需要重新安装它。