如果您在记事本或其他基本文本编辑器中打开 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+单击。这将带您进入上述课程,您可以对其进行编辑以解决问题。
请注意不要编辑任何其他内容,因为您很容易破坏您的库,如果发生这种情况,您需要重新安装它。