我正在制作一个解析数据文件的python.然后将解析的数据发送到excel文件.数据可能相当庞大.我正在看10到20列,但行数可以超过100.000.
使用win32com将此数据量写入excel需要相当长的时间.我的第一步是在excel文件中迭代遍历单元格,这非常耗时.经过一番挖掘后,我发现如何通过一次调用来编写一行,从而大大减少了所需的时间.
但是,当我需要向excel发送100.000行数据时,仍然需要花费很多时间.我很确定通过一次调用发送完整的数组,我可以进一步提高速度.但是到目前为止我无法做到这一点.
请参阅下面的代码,该代码演示了该问题.代码显示了时间上的差异.但是,第三步,通过一次调用向一个范围发送完整数组不会导致excel中的正确数据.我究竟做错了什么?
import win32com.client
import time
#create data array
row = range(0,10)
i = 0
data_array = []
while i < 1000:
data_array.append(row)
i += 1
#write the array to an excel file
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True
excel.ScreenUpdating = False
book = excel.Workbooks.Add()
sh1 = book.Worksheets(1)
sh2 = book.Worksheets(2)
sh3 = book.Worksheets(3)
#double loop, writing individual cells
print "Writing with double loop to inidividual cells."
start = time.time()
row = 0
for line in data_array:
row …Run Code Online (Sandbox Code Playgroud) 我正在用python创建一个应用程序.一切正常.到目前为止,一切都在一个源文件中.你从小开始,然后一切都在增长.我到了一个代码很难理解的地方.所以我决定我需要在模块和类中拆分代码.
我终于把一些东西放在一起,让它全部运转起来.但是,我对使用python制作复杂的GUI没有太多帮助.因此使用类来创建小部件等.
我做了一个小示例应用程序,演示了以下内容:
这篇文章的目的是双重的.
我的例子有四个源文件.
start.py.该模块仅启动应用程序,创建Gui类的对象.
import main
if __name__ == '__main__':
title = "Test"
gui = main.Gui(title)
Run Code Online (Sandbox Code Playgroud)main.py. 该模块包含Gui类,并保存GUI的根元素.
import Tkinter
import action
import widget
class Gui():
def __init__(self, title):
self.root = Tkinter.Tk()
self.root.protocol("WM_DELETE_WINDOW", self.applicationExit)
self.root.title(title)
#create the action object
self.process = action.Adder()
#create the input frame
self.frameIn = widget.Input(self.root)
self.frameIn.grid(row=0, column=0, padx = 5, pady =5, ipadx = 5, ipady = 5, sticky = Tkinter.N)
#create the output frame
self.frameOut = widget.Output(self.root) …Run Code Online (Sandbox Code Playgroud)