- 浏览: 582376 次
- 性别:
- 来自: 苏州
-
文章分类
- 全部博客 (206)
- Flask (1)
- JavaScript (3)
- Core Java (41)
- XML (1)
- Oracle (11)
- 软件安装及环境配置 (0)
- 其它 (9)
- 面试/笔试 (5)
- 项目 (0)
- JDBC (11)
- Servlet (4)
- MySql (4)
- JNDI (0)
- Hibernate (11)
- Java模式和构架设计 (0)
- Web设计 (22)
- JSP (8)
- Struts (13)
- Tomcat (2)
- Marven (2)
- SVN (2)
- Swing/AWT (1)
- jQuery (2)
- ExtJS (8)
- Python (22)
- Flex (1)
- Django (7)
- 算法 (5)
- English (1)
- Twisted (1)
- Linux (3)
- Rails (1)
- SVG (3)
- PostgreSQL (1)
Python Excel Tutorial (一):xlrd的安装和读取Excel文件
- 博客分类:
- Python
Python Excel Tutorial 指南
安装
有几种不同的安装方法。下面是以xlrd为例的,其它二个库都是使用同样的步骤。
从源码安装
Linux系统:
$ tar xzf xlrd.tgz $ cd xlrd-0.7.1 $ python setup.py install
Windows系统:使用WinZip或类似工具解压xlrd-0.7.1.zip:
C:\> cd xlrd-0.7.1 C:\xlrd-0.7.1> \Python26\python setup.py install
注意:确保你想要在你的项目中使用python。
使用Windows Installer安装
Windows系统下,你可以下载运行xlrd-0.7.1.win32.exe安装。
注意它只是以注册表形式安装到Python中。
使用EasyInstall安装
这种跨平台方法需要你已经安装了EasyInstall。更多信息请参考:
http://peak.telecommunity.com/DevCenter/EasyInstall
easy_install xlrd
使用Buildout安装
Buildout在遇见python包时依靠一个没有涉及到Python系统的项目,提供一种跨平台的方法。
创建一个目录mybuildout,在里面下载下面文件:
http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py
现在,在mybuilout目录中创建一个名为buildout.cfg的文件,内容如下:
[buildout] parts = py versions = versions [versions] xlrd=0.7.1 xlwt=0.7.2 xlutils=1.3.2 [py] recipe = zc.recipe.egg eggs = xlrd xlwt xlutils interpreter = py
注意:这个版本部分是可选的。
最后,运行下面:
$ python bootstrap.py $ bin/buildout
这两行:
- 初始化buildout环境
- 运行buildout。 如果发生了变化这个命令每次都应该执行。
Buildout主页在 http://pypi.python.org/pypi/zc.buildout
读取Excel文件
下面展示的所有的例子都是基于xlrd目录的教程。
打开Workbooks
Workbooks能从一个文件、一个mmap.mmap对象或一个字符串加载:
from mmap import mmap,ACCESS_READ from xlrd import open_workbook print open_workbook('simple.xls') with open('simple.xls','rb') as f: print open_workbook( file_contents=mmap(f.fileno(),0,acc ) aString = open('simple.xls','rb').read() print open_workbook(file_contents=aString)
操作Workbook
这是一个简单操作workbook的例子:
from xlrd import open_workbook wb = open_workbook('simple.xls') for s in wb.sheets(): print 'Sheet:',s.name for row in range(s.nrows): values = [] for col in range(s.ncols): values.append(s.cell(row,col).value) print ','.join(values) print
下面几乎没有小节涉及到操作workbook的更多细节。
揭秘Book
通过open_workbook返回的xlrd.Book对象包含了所有对工作簿要的事情,能被用于在工作簿中取得独立的sheet。
这个nsheets属性是一个整数,包含工作簿sheet的数量。这个属性与sheet_by_index方法结合起来是获取独立sheet最常用的方法。
sheet_names方法返回包含工作簿中所有sheet名字的unicode列表。单独的sheet可以通过sheet_by_name方法使用这些名字获取。
sheets方法的结果是迭代获取工作簿中的每个sheet。
下面是这些方法和属性的例子示范:
from xlrd import open_workbook book = open_workbook('simple.xls') print book.nsheets for sheet_index in range(book.nsheets): print book.sheet_by_index(sheet_index) print book.sheet_names() for sheet_name in book.sheet_names(): print book.sheet_by_name(sheet_name) for sheet in book.sheets(): print sheet
xlrd.Book对象有与工作簿内容相关的其它属性,但很少用到:
- codepage
- countries
- user_name
如果你可能需要运用这些属性,请查看xlrd文档。
揭秘Sheet
通过上面介绍的方法返回的xlrd.sheet.Sheet对象包含了所有对worksheet和它的内容操作的信息。
name属性是worksheet名字的unicode表示。
nrows和ncols属性分别包含了worksheet中的行数和列数。
下面例子展示了如何使用迭代来显示一个worksheet的内容:
from xlrd import open_workbook,cellname book = open_workbook('odd.xls') sheet = book.sheet_by_index(0) print sheet.name print sheet.nrows print sheet.ncols for row_index in range(sheet.nrows): for col_index in range(sheet.ncols): print cellname(row_index,col_index),'-', print sheet.cell(row_index,col_index).value
xlrd.sheet.Sheet对象有其他一些与worksheet内容相关的属性,但很少使用:
-
col_label_ranges
-
row_label_ranges
-
visibility
如果你认为你可能需要运用这些属性,请参看xlrd文档。
获得特定的单元格
正如你在前面例子中看到的,Sheet对象的cell方法能用来返回特定单元格的内容。
cell方法返回一个xlrd.sheet.Cell对象。除了value包含了单元格的真实值,ctype包含了单元格的类型,Cell对象几乎没有其他属性。
另外,Sheet对象有两个方法返回这两种数据类型。cell_value方法返回特定单元格的值,而cell_type方法返回特定单元格的类型。这两个方法执行时比获取Cell对象更快。
后面会讲述更多Cell类型的细节。下面示范了这些方法,属性和起作用的类:
from xlrd import open_workbook,XL_CELL_TEXT book = open_workbook('odd.xls') sheet = book.sheet_by_index(1) cell = sheet.cell(0,0) print cell print cell.value print cell.ctype==XL_CELL_TEXT for i in range(sheet.ncols): print sheet.cell_type(1,i),sheet.cell_value(1,i)
迭代Sheet的内容
我们已经见过怎么迭代worksheet的内容,获取产生的单独的单元格。然而,有更容易的方法来获取单元格组。有一套对称的方法来通过行或列获取单元格组的信息。
row和col方法分别返回一整行(列)的Cell对象。
row_slice和col_slice方法分别返回一行(列)中以开始索引和一个可选的结束索引为边界的Cell对象列表。
row_types和col_types方法分别返回一行(列)中以开始索引和一个可选的结束索引为边界的表示单元格类型的整数列表。
row_values和col_values方法分别返回一行(列)中以开始索引和一个可选的结束索引为边界的表示单元格值的对象列表。
下面是所有sheet迭代方法的示例:
from xlrd import open_workbook book = open_workbook('odd.xls') sheet0 = book.sheet_by_index(0) sheet1 = book.sheet_by_index(1) print sheet0.row(0) print sheet0.col(0) print print sheet0.row_slice(0,1) print sheet0.row_slice(0,1,2) print sheet0.row_values(0,1) print sheet0.row_values(0,1,2) print sheet0.row_types(0,1) print sheet0.row_types(0,1,2) print print sheet1.col_slice(0,1) print sheet0.col_slice(0,1,2) print sheet1.col_values(0,1) print sheet0.col_values(0,1,2) print sheet1.col_types(0,1) print sheet0.col_types(0,1,2)
实用方法
当围绕workbook进行操作的时候,把行和列转换成用户习惯看到的Excel单元格引用(如:(0,0)转换成A1),这是很有用的。下面提供的方法帮助我们实现它:
cellname方法把一对行和列索引转换为一个对应的Excel单元格引用。
cellnameabs方法把一对行和列索引转换为一个绝对的Excel单元格引用(如:$A$1)。
colname方法把一个列索引转换为Excel列名。
下面是这三个方法的示例:
from xlrd import cellname, cellnameabs, colname print cellname(0,0),cellname(10,10),cellname(100,100) print cellnameabs(3,1),cellnameabs(41,59),cellnameabs(265,358) print colname(0),colname(10),colname(100)
Unicode
由xlrd产生的所有文本属性不是unidecode对象,就是ascii字符串(很少)。
由Microsoft Excel输入的每个文本都是下列编码之一:
- Latin1,如果匹配
- UTF_16_LE,如果不匹配Latin1
- 在更老的文件中,是按MS字符集规范编码的。他们由xlrd映射到Python编码,结果仍是unicode对象。
其他知名软件用错误字符集或不用字符集写入Excel文件的情况是很少的。这种情况下,可能需要在open_workbook方法中指定正确的字符集。
from xlrd import open_workbook book = open_workbook('dodgy.xls',encoding='cp1252')
单元格的类型
我们已经看过单元格类型用一个整数表示。这个整数相当于xlrd识别单元格类型的一组常数。可能的单元格类型在下面部分全部被列出来了。
Text 文本
这是由xlrd.XL_CELL_TEXT常数表示的。
这种类型的单元格的值是unicode对象。
Number 数字
这是由xlrd.XL_CELL_NUMBER常数表示的。
这种类型的单元格的值是float对象。
Date 日期
这是由xlrd.XL_CELL_DATE常数表示的。
注意:日期在Excel文件中实际上是不存在的,它们只不过是特别格式化后的数字。
如果数字格式字符串看起来像日期,xlrd将会返回xlrd.XL_CELL_DATE作为单元格类型。
提供的xldate_as_tuple方法把日期单元格中的float数转化为适合实例化各种日期或时间对象的元组。这个例子展示了怎么使用它:
from datetime import date,datetime,time from xlrd import open_workbook,xldate_as_tuple book = open_workbook('types.xls') sheet = book.sheet_by_index(0) date_value = xldate_as_tuple(sheet.cell(3,2).value,book.datemode) print datetime(*date_value),date(*date_value[:3]) datetime_value = xldate_as_tuple(sheet.cell(3,3).value,book.datemode) print datetime(*datetime_value) time_value = xldate_as_tuple(sheet.cell(3,4).value,book.datemode) print time(*time_value[3:]) print datetime(*time_value)
说明:
- Excel文件有两种可能的日期模式,一种用于最初由Windows创建的文件,一种用于最初由苹果电脑创建的文件。这个日期模式被表示成xlrd.Book对象的datemode属性,且必须传值给xldate_as_tuple方法。
- Excel文件格式对1904年一月3日以前的日期有各种问题,引起日期混乱,从而抛出XLDateError错误。
- Excel公式方法DATE()在某些情况下会返回出乎意料的日期。
Boolean 布尔值
这是由xlrd.XL_CELL_BOOLEAN常数表示的。
这种单元格的值是bool对象。
Error 错误
这是由xlrd.XL_CELL_ERROR常数表示的。
这种单元格的值是表示特定错误代码的整数。
error_text_from_code方法用来把错误代码转换为错误信息:
from xlrd import open_workbook,error_text_from_code book = open_workbook('types.xls') sheet = book.sheet_by_index(0) print error_text_from_code[sheet.cell(5,2).value] print error_text_from_code[sheet.cell(5,3).value]
对一种明显显示所有单元格类型的简单方法,参看xlutils.display。
Empty/Blank 空值或空白
Excel只是在单元格中存储信息,或者对单元格格式化。而xlrd是作为单元格的矩形网格表示。
Excel文件中没有任何信息的单元格由xlrd.XL_CELL_EMPTY常数表示。另外,只要有一个空值,用于xlrd后整个值是空串,所以空值单元格应该使用一种Python标识检查。
Excel文件中只有格式信息的单元格由xlrd.XL_CELL_BLANK常数表示,它的值总是一个空字符串。
from xlrd import open_workbook,empty_cell print empty_cell.value book = open_workbook('types.xls') sheet = book.sheet_by_index(0) empty = sheet.cell(6,2) blank = sheet.cell(7,2) print empty is blank, empty is empty_cell, blank is empty_cell book = open_workbook('types.xls',formatting_info=True) sheet = book.sheet_by_index(0) empty = sheet.cell(6,2) blank = sheet.cell(7,2) print empty.ctype,repr(empty.value) print blank.ctype,repr(blank.value)
下面例子展示了以上所有单元格类型一起的使用:
from xlrd import open_workbook def cell_contents(sheet,row_x): result = [] for col_x in range(2,sheet.ncols): cell = sheet.cell(row_x,col_x) result.append((cell.ctype,cell,cell.value)) return result sheet = open_workbook('types.xls').sheet_by_index(0) print 'XL_CELL_TEXT',cell_contents(sheet,1) print 'XL_CELL_NUMBER',cell_contents(sheet,2) print 'XL_CELL_DATE',cell_contents(sheet,3) print 'XL_CELL_BOOLEAN',cell_contents(sheet,4) print 'XL_CELL_ERROR',cell_contents(sheet,5) print 'XL_CELL_BLANK',cell_contents(sheet,6) print 'XL_CELL_EMPTY',cell_contents(sheet,7) print sheet = open_workbook( 'types.xls',formatting_info=True ).sheet_by_index(0) print 'XL_CELL_TEXT',cell_contents(sheet,1) print 'XL_CELL_NUMBER',cell_contents(sheet,2) print 'XL_CELL_DATE',cell_contents(sheet,3) print 'XL_CELL_BOOLEAN',cell_contents(sheet,4) print 'XL_CELL_ERROR',cell_contents(sheet,5) print 'XL_CELL_BLANK',cell_contents(sheet,6) print 'XL_CELL_EMPTY',cell_contents(sheet,7)
Names
这些是很少使用但很强大的抽象方法,常用于查找Excel文件的内部信息。
它们有很多用途,xlrd能从它们之中获取信息。一个值得注意的例外是与sheet和宏命令相关的信息将会被忽略。
Names在Excel中是通过Insert > Name > Define操作创建的。如果你想使用xlrd来从Names中获取信息,在你选择的电子表格应用程序中精通names的定义和运用是一个不错的想法。
Types 类型
一个Name可以涉及到:
- 一个常数
CurrentInterestRate = 0.015
NameOfPHB = “Attila T. Hun”
- 一个单元格的绝对引用
CurrentInterestRate = Sheet1!$B$4
- 一个单元格的1D,2D或3D块的绝对引用
MonthlySalesByRegion = Sheet2:Sheet5!$A$2:$M$100
- 一个绝对引用的列表
Print_Titles = [row_header_ref, col_header_ref])
常数可以被获取。
绝对引用的坐标可以被获取,以便你稍后获取相关sheet的对应数据。
相对引用只有当你很熟悉被作为起源使用的单元格时是有用的。Excel文件中包含函数调用在内的公式和多重引用并不是有用的,也太难而无法评估。
xlrd中没有包含全部的计算引擎。
Scope 范围
一个Name的Score可以是全局的,或者它只针对特定的sheet。一个Name的标识符在不同Scope内可以被重用。但有多个相同标识符的Name,根据scope使用最合适的一个。一个好例子是内置名为Print_Area;每个worksheet都可能有它们中的一个。
例:
name=rate, scope=Sheet1, formula=0.015
name=rate, scope=Sheet2, formula=0.023
name=rate, scope=global, formula=0.040
一个单元格公式(1+rate)^20出现在Sheet1等价于1.015^20,出现在Sheet2等价于1.023^20,出现在其他Sheet等价于1.040^20。
惯例
使用names的一般原因包括:
- 一个workbook中可能多个地方出现的值设定文本名称。如:RATE = 0.015
- 容易被错误复制的复杂公式设定文本名称。如:SALES_RESULTS = $A$10:$M$999
这里有个真实世界的案例:向总部报告。一个公司的总部制作了一个模版workbook。每个部门复制一份并填充内容。所有被提供的日期范围都定义了Names。当这些文件传回时,一个脚本用于验证这个部门是否损坏了这个workbook,这个Names用于获取数据来做进一步处理。使用names可以将这些范围解耦和,不管是总部设计模版的用户还是往模版里填充内容的部门用户 从这个脚本都只知道这些范围的names,而不知道具体的范围值。
在xlrd发布的examples目录中你会找到namesdemo.xls,有许多例子,大部分都是针对非苹果系统定义的names。也有个xlrdnamesAPIdemo.py文件展示了如何使用name查找字典,如何获取常数、引用和引用指向的数据。
格式化
我们已经看到open_workbook方法有个参数从Excel文件加载信息。当这步完成,所有格式化信息都是可获得的,但是它是怎么实现的细节不再本书的范围内。
如果你想要复制格式化后的数据到一个新Excel文件中,参看xlutils.copy和xlutils.filter。
如果你想要检测格式化信息,你需要参考下面类的属性:
xlrd.Book
colour_map font_list format_list format_map
palette_record style_name_map xf_list
xlrd.sheet.Sheet
cell_xf_index rowinfo_map colinfo_map computed_column_width
default_additional_space_above default_additional_space_below
default_row_height default_row_height_mismatch
default_row_hidden defcolwidth
gcw merged_cells
standard_width
xlrd.sheet.Cell
xf_index
Other Classes
另外,下面类是只用于表示格式化的信息:
xlrd.sheet.Rowinfo
xlrd.sheet.Colinfo
xlrd.formatting.Font
xlrd.formatting.Format
xlrd.formatting.XF
xlrd.formatting.XFAlignment
xlrd.formatting.XFBackground
xlrd.formatting.XFBorder
xlrd.formatting.XFProtection
操作大的Excel文件
如果你在操作特别大的Excel文件,那么有两个你应该注意的xlrd特性:
-
open_workbook方法的on_demand参数为True,被访问时会导致只往内存里加载worksheet。
-
xlrd.Book对象有一个unload_sheet方法能通过指定sheet索引或sheet名称从内存中卸载worksheet。
下面的例子展示了一个大的workbook怎么去迭代被检查只匹配某一模式的sheet,并在内存中某个时间被卸载。
from xlrd import open_workbook book = open_workbook('simple.xls',on_demand=True) for name in book.sheet_names(): if name.endswith('2'): sheet = book.sheet_by_name(name) print sheet.cell_value(0,0) book.unload_sheet(name)
用runxlrd.py揭秘Excel文件
xlrd源码发布包括runxlrd.py脚本,它是非常有用的,不用写单行Python就能揭秘Excel文件。
推荐运行教材提供的各种命令操作Excel文件。
下面是从runxlrd获得的一个预览,使用python runxlrd.py --help能得到:
runxlrd.py [options] command [input-file-patterns] Commands: 2rows Print the contents of first and last row in each sheet 3rows Print the contents of first, second and last row in each sheet bench Same as "show", but doesn't print -- for profiling biff_count[1] Print a count of each type of BIFF record in the file biff_dump[1] Print a dump (char and hex) of the BIFF records in the file fonts hdr + print a dump of all font objects hdr Mini-overview of file (no per-sheet information) hotshot Do a hotshot profile run e.g. ... -f1 hotshot bench bigfile*.xls labels Dump of sheet.col_label_ranges and ...row... for each sheet name_dump Dump of each object in book.name_obj_list names Print brief information for each NAME record ov Overview of file profile Like "hotshot", but uses cProfile show Print the contents of all rows in each sheet version[0] Print versions of xlrd and Python and exit xfc Print "XF counts" and cell-type counts -- see code for details [0] means no file arg [1] means only one file arg i.e. no glob.glob pattern Options: -h, --help show this help message and exit -l LOGFILENAME, --logfilename=LOGFILENAME contains error messages -v VERBOSITY, --verbosity=VERBOSITY level of information and diagnostics provided -p PICKLEABLE, --pickleable=PICKLEABLE 1: ensure Book object is pickleable (default); 0: don't bother -m MMAP, --mmap=MMAP 1: use mmap; 0: don't use mmap; -1: accept heuristic -e ENCODING, --encoding=ENCODING encoding override -f FORMATTING, --formatting=FORMATTING 0 (default): no fmt info 1: fmt info (all cells) -g GC, --gc=GC 0: auto gc enabled; 1: auto gc disabled, manual collect after each file; 2: no gc -s ONESHEET, --onesheet=ONESHEET restrict output to this sheet (name or index) -u, --unnumbered omit line numbers or offsets in biff_dump
发表评论
-
sqlalchemy note
2012-09-10 22:47 14241 # 父表插入记录出错,NotSupportedEr ... -
python note
2012-09-07 11:49 14721.func(**{'type':'Event'}) 等价于f ... -
note
2012-09-03 20:10 1682安装easy_install 安装pip easy_i ... -
with 和 if-else条件表达式
2012-07-22 11:09 1661对于要确保即使发生一个错误时也能运行一些清理代码而言,try. ... -
Python 线程
2012-02-21 12:01 14031.创建线程 通过继承threading模块中的Thread ... -
Python面向对象笔记
2012-02-20 17:18 13861.特殊的类属性 对任何类,都有下面特殊属性: ... -
socket模块
2012-02-20 12:09 14341.socket(family, type) 创建套接字对象 ... -
Python datetime模块
2012-02-18 12:33 9300datetime模块的所有类的对象都是不可变的。 da ... -
Python time模块
2012-02-17 18:20 1080底层C语言库决定了time模块可以处理的日期范围。 c ... -
发送邮件
2012-01-14 19:59 12341.使用smtplib #encoding=utf-8 ... -
Python文件操作
2012-01-14 16:26 1096一.os模块常用操作函数 remove()/unlin ... -
Python单例模式
2012-01-13 22:12 3572方法一 import threading cla ... -
Python异常
2012-01-13 19:11 24871.常用异常名 AttributeError 调用不 ... -
列表和元组
2012-01-12 13:57 15751.列表常用操作 list.append(x) 追加 ... -
字符串
2012-01-12 13:19 14781.字符串常用操作: ... -
Python基础笔记
2012-01-14 16:31 11851.环境变量设置: 编辑系统变量Path,添加两 ... -
版本控制Mercurial(hg)
2011-11-12 16:07 3149简介 ... -
Python排序
2011-09-10 13:32 161951.字符串列表排序 列表的排序是python内置功能,自身含 ... -
ChartDirector在Pythonr下的安装
2011-08-27 17:38 17951、在C:/python27/Lib/site_pack ... -
我的第一个Python Web应用
2011-07-05 16:02 3964本文实现的是通信录的Web应用,在Windows xp环 ...
相关推荐
本文档是 EuroPython 2009 大会上的一个 tutorial 材料,主要介绍了使用 Python 语言处理 Excel 文件的技术和方法。该文档提供了一个详细的教程,指导读者如何使用 Python 库来读取、写入和操作 Excel 文件。 标签...
主要内容涵盖单选题和操作题两大部分。单选题涉及openGauss数据库的基本概念、数据模型、SQL语法、事务管理和用户权限等方面的知识点。操作题则围绕一个名为bookdb的图书购买信息数据库展开,具体任务包括插入图书信息、更新顾客信息、删除购买记录、查询特定图书信息以及创建视图、存储过程和触发器等实际操作。每道题目均附带详细的解题步骤和最终答案。
新建 Microsoft Word 文档 (9).docx
Delphi 12.3控件之nrCommLib Pro v9.54 Full Source for D10.3-D12.7z
内容概要:本文详细介绍了使用三菱PLC FX5U控制四轴伺服系统的全过程,涵盖硬件配置、电气接线、参数设置以及运动控制逻辑。硬件方面,选用三菱FX5U-64MT作为主控制器,搭配四个MR-JE-20A伺服驱动器和其他必要组件。软件部分则深入探讨了轴参数初始化、原点回归、多轴联动、HMI界面设计及报警处理等关键技术环节。特别针对旋转轴的特殊处理进行了详细说明,如双速原点回归、绝对定位指令的应用等。此外,还提供了调试经验和优化技巧,确保系统的高精度和平稳运行。 适合人群:从事自动化控制系统设计、调试的技术人员,尤其是对三菱PLC和伺服系统有一定了解的研发人员。 使用场景及目标:适用于工业自动化领域的四轴伺服控制系统开发,旨在帮助工程师掌握从硬件选型到软件编程的一整套解决方案,提高项目的成功率和技术水平。 其他说明:文中附有多份参考资料,包括完整的程序文件、界面工程、CAD接线图和伺服参数清单,便于读者进行实际操作和验证。
分阶段学习:先掌握基础,再深入细分领域。 理论与实践结合:学完算法后立刻用代码实现。 保持持续学习:AI技术迭代快,需跟踪最新进展。
电子硬件课程设计
Java项目基于ssm框架的课程设计,包含LW+ppt
脚本-压测相关-zyx编写
Java项目基于ssm框架的课程设计,包含LW+ppt
app.mobileconfig
内容概要:本文详细介绍了使用MotorCAD进行2极12槽永磁直流有刷电机的设计与优化方法。首先,通过Python脚本设置电机的基本参数,如外径、轴向长度、额定转速等。接着,深入探讨了磁钢选型、绕组设置、电磁仿真、热分析等多个关键技术环节。针对常见的设计难题,如齿槽转矩、磁钢充磁方向、绕组跨距等提供了具体的解决方案。同时,还分享了一些提高仿真精度和优化性能的实用技巧,如参数扫描、FEA计算、热管理等。最后,通过实测数据分析验证了设计方案的有效性。 适合人群:电机设计工程师、高校相关专业师生、对电机设计感兴趣的开发者。 使用场景及目标:适用于需要精确设计和优化小型永磁直流有刷电机的场合,帮助用户掌握MotorCAD的具体应用,提高设计效率和产品质量。 其他说明:文中提供的Python和VB脚本示例有助于自动化参数设置和批量处理任务,减少重复劳动。此外,还强调了在设计过程中需要注意的关键技术和常见陷阱,确保设计方案的可行性和可靠性。
内容概要:本文详细介绍了三相逆变器在MATLAB/Simulink环境下的PI闭环控制及解耦控制的实现方法。首先,通过坐标变换将三相电流从静止坐标系转换到旋转坐标系,确保功率守恒并实时更新转子位置角。接着,实现了带有抗饱和处理的PI控制器,防止积分风-up现象。然后,针对d轴和q轴之间的耦合问题,引入了解耦控制,通过低通滤波和交叉耦合项来稳定系统。此外,还讨论了PWM生成模块的死区时间和仿真结果的验证方法,强调了参数调试的重要性和具体策略。 适合人群:电力电子工程师、自动化控制领域的研究人员以及对三相逆变器控制感兴趣的高校师生。 使用场景及目标:适用于需要深入了解三相逆变器控制原理和技术实现的研究项目或工程应用。主要目标是掌握PI控制器的设计、解耦控制的应用及其在MATLAB/Simulink中的仿真实现。 其他说明:文中提供了详细的代码示例和调试技巧,帮助读者更好地理解和实践相关理论。同时提醒读者,仿真成功并不代表实际硬件运行无误,建议在实验过程中准备必要的保护措施。
58面经面试过程和题目.txt
OceanBase OBCP 实验指导手册V1.3
内容概要:本文详细介绍了ABB喷涂机器人IRC5P与PLC通过Profinet通讯进行程序号启动的具体步骤和注意事项。主要内容涵盖Profinet通讯的基本配置,包括设备名称、IP地址设置,RAPID代码编写,任务声明,信号映射,以及调试技巧。文中还分享了许多实际调试中的经验和常见错误,如大小写敏感、IP地址分配、程序号有效性和信号防抖处理等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是负责机器人与PLC通讯配置的技术人员。 使用场景及目标:帮助技术人员正确配置ABB喷涂机器人IRC5P与PLC之间的Profinet通讯,确保程序号能够顺利启动,避免常见的配置错误和调试难题。 其他说明:文章强调了硬件和软件配置相结合的重要性,并提供了详细的代码示例和调试建议,有助于提高系统的稳定性和可靠性。
电子硬件课后习题题目及要求.docx
亲测开源好用的红盟云发卡源码对接支付宝等支持一件搭建,方便建立自己的发卡平台,源码全部开源无加密,可方便而开使用。 测试环境:php7.2+mysql+宝塔面板 安装教程: ①设置public运行目录 ②设置thinkphp伪静态 ③访问域名填写数据库信息根据提示安装
Delphi 12.3控件之MiTeC_System_Information_Component_Suite_15.1.0_Full_Source.7z
Delphi 12.3控件之StyleControls 5.80.7z