Python DI实现:按Excel列值筛选拆分代码示例

需积分: 50 70 下载量 118 浏览量 更新于2024-08-07 收藏 5.15MB PDF 举报
"本文主要介绍了如何使用Python进行Excel文件的处理,特别是按列值筛选数据并拆分到多个文件,同时引入了依赖注入(Dependency Injection, DI)的概念,以提高代码的可维护性和解耦性。文章提到了使用Google的Guice框架来实现DI。此外,还提及了一本名为《领域专用语言实战》的书籍,书中详细探讨了DSL(Domain-Specific Language)的设计和实现,包括DSL的类型、优缺点以及在实际应用中的构建方法。" 在标题所提到的场景中,我们关注的是Python对Excel文件的处理。在处理Excel数据时,经常需要根据特定条件筛选数据,这里可能是按照某一列的值进行筛选。Python中有多种库可以用来操作Excel文件,如pandas和openpyxl。例如,使用pandas,我们可以先读取Excel文件,然后通过条件筛选DataFrame,最后将筛选后的数据写入新的Excel文件。 ```python import pandas as pd # 读取Excel文件 df = pd.read_excel('input.xlsx') # 假设我们按'ColumnA'列的值筛选 filtered_data = df[df['ColumnA'] == 'TargetValue'] # 将筛选后的数据写入新的Excel文件 filtered_data.to_excel('output.xlsx', index=False) ``` 描述中提到的依赖注入(DI)是一种设计模式,用于减少代码间的耦合。在例子中,TradeProcessor类不再负责创建和管理SettlementDateCalculator的实例,而是通过外部注入的方式获取。DI框架如Guice可以帮助管理这些依赖关系,使得TradeProcessor只需关注其核心功能,而不关心依赖的实现细节。 ```java // 使用Guice框架进行依赖注入的例子 import com.google.inject.Inject; public class TradeProcessor { private final SettlementDateCalculator calculator; @Inject public TradeProcessor(SettlementDateCalculator calculator) { this.calculator = calculator; } } ``` 标签"专用语言"可能指的是领域专用语言(DSL)。DSL是一种专门针对某一特定领域设计的语言,它允许该领域的专家以更自然、更高效的方式来表达问题和解决方案。书中详细介绍了DSL的类型(内部DSL和外部DSL)、执行模型以及在实际项目中的应用和实现策略。 这篇文章涵盖了Excel数据处理、依赖注入的概念以及DSL的设计和应用,这些都是在软件开发中非常重要的技能和理念。通过学习这些知识,开发者可以更好地优化代码结构,提升工作效率。

给出dosbox画圆程序的前半部分代码,为该代码添加注释,在结尾给出简易流程说明 data segment shuc db 'draw a yuan: $' hua1 db 'input yuanxin and banjing(example:310,220 200): $' zifu db 20 dup(0) ;此段用以临时存放输入字符 shu db 20 dup(0) ; suan db 24 dup(0) ;用来存放计算圆过程中产生的临时数据 data ends stack segment stk db 16 dup(0) stack ends code segment assume cs:code, ds:data,ss:stack start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov dx,offset shuc ;显示输入C的提示字符 call showmsg call input ;输入字符c的处理 mov al,ds:[si] and al,11011111b ;便于大小写都识别,将字符转换成大写 cmp al,43h draw1: mov dx,offset hua1 call showmsg call input call zhuanshu call moshi mov bx,offset shu mov ax,ds:[bx] mov si,ax mov ax,ds:[bx+2] mov di,ax mov ax,ds:[bx+4] call drawyuan mov ax,4c00h int 21h ;--------------------------------------- input: ;实现键盘输入字符 mov bx,0 mov cx,20 re: mov ah,1h ;DOS中断 键盘键入回显,al为字符 int 21h cmp al,0dh ;0dh为回车的ASCII码 jz scx mov si,offset zifu mov [bx][si],al ;将输入的字符放到zifu区 inc bx loop re ret ;-------------------------------------- scx: ;条件跳转时对cx设置 mov cx,0 ret ;-------------------------------------- showmsg: ;用来显示提示字符 mov ah,9h int 21h ret ;-------------------------------------- moshi: ;屏幕显示模式 mov al,12h mov ah,0 int 10h ret ;------------------------------------- zhuanshu: ;将输入的ascII码转为数字 mov bx,offset zifu mov bp,offset shu mov cx,16 mov si,0 mov di,0 lei: mov al,ds:[bx][si] cmp al,0 jz scx sub al,30h mov dl,100 mul dl mov word ptr ds:[bp][di],ax mov ax,0 mov al,ds:[bx][si+1] sub al,30h mov dl,10 mul dl add ax,word ptr ds:[bp][di] mov word ptr ds:[bp][di],ax mov ax,0 mov al,ds:[bx][si+2] sub al,30h add ax,word ptr ds:[bp][di] mov word ptr ds:[bp][di],ax add si,4 add di,2 loop lei ret

2023-05-31 上传