数据排序

使用列表对象的sorted方法可以对该列表的数据进行排序,并返回排序后的数据构成的列表,例如

code.python
>>> a=[1,6,3,9,2,7]
>>> b=sorted(a)
>>> b
[1, 2, 3, 6, 7, 9]

对于图6-11中处理前工作表中的数据,根据第一列的工号进行排序。思路是利用工作表数据创建一个字典,将工号作为键,将它对应的行数据作为值构造键值对。然后用sorted方法对工号构成的列表进行排序,排序后的工号对应的行数据值就是操作的结果。

code.python
1	import xlwings as xw
2	import os
3	root = os.getcwd()
4	app = xw.App(visible=True, add_book=False)
5	wb=app.books.open(root+r"/身份证号-排序.xlsx",read_only=False)
6	sht=wb.sheets(1)
7	ids=sht.range("A2",sht.cells(sht.cells(1,"A").end("down").row,"A")).value
8	id_sorted=sorted(ids)  #对工号排序
9	rng=sht.range("A2",sht.cells(sht.cells(1,"B").end("down").row,"E"))
10	dicT={}  #创建字典
11	for i in range(len(ids)):  #遍历每行数据
12	    dicT[rng[i,0].value]=rng.rows(i+1).value  #工号为键,行数据为值
13	num=1
14	sht2=wb.sheets(2)
15	for i in range(len(id_sorted)):  #在第2个工作表中写入排序后的数据
16	    num+=1
17	    sht2.cells(num,"A").value=dicT[id_sorted[i]]  #键为排序后的工号

第1-5行的说明同6.1.1小节的代码说明。

第6-7行获取活动工作表,用range属性获取第一列工号数据到列表ids。

第8行对列表ids中的数据进行排序,返回排序后的列表id_sorted。

第9行用range属性获取第一行以外的数据所在的区域rng。

第10行创建空字典dicT。

第11-12行用一个for循环往字典dicT中添加键值对。将工号作为键值对的键,将工号所在的行数据作为键值对的值。

第13-17行使用一个for循环,将排序后的工号作为键去获取对应的行数据值,逐个输出到第2个工作表中。

在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,数据排序结果如图6-11中处理后工作表中所示。

Document Image

图6-11 数据排序