小编Eri*_*ric的帖子

用win32com在python中编写数组到excel

我正在制作一个解析数据文件的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 excel win32com

6
推荐指数
2
解决办法
9673
查看次数

在Python中使用Tkinter进行子类化

我正在用python创建一个应用程序.一切正常.到目前为止,一切都在一个源文件中.你从小开始,然后一切都在增长.我到了一个代码很难理解的地方.所以我决定我需要在模块和类中拆分代码.

我终于把一些东西放在一起,让它全部运转起来.但是,我对使用python制作复杂的GUI没有太多帮助.因此使用类来创建小部件等.

我做了一个小示例应用程序,演示了以下内容:

  1. 拆分GUI代码和操作代码.在我的例子中,动作代码由一个单独的类处理,这也可能只是一个单独的模块.
  2. 在我的示例Tkinter.LabelFrame中,通过子类化容器来创建自定义小部件.
  3. 使用传播的虚拟/自定义事件来触发主代码中的操作.
  4. 与子类/小部件交换数据

这篇文章的目的是双重的.

  1. 我希望其他人可以从我必须解决的斗争中受益.
  2. 也许其他人可以进一步改进这个例子

我的例子有四个源文件.

  1. start.py.该模块仅启动应用程序,创建Gui类的对象.

    import main
    
    if __name__ == '__main__':
        title = "Test"
        gui = main.Gui(title)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 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)

python tkinter

1
推荐指数
1
解决办法
3731
查看次数

标签 统计

python ×2

excel ×1

tkinter ×1

win32com ×1