当前位置:首页 >> IT/计算机 >>

PYthon模块使用教程


add 模块 进度条模块 os 模块 contacts 模块 zlib 模块 fy_marage 模块 e32 模块 sysinfo 模块 正则表达式 模块 Cfileman 模块 appuifw 模块 appuifw2 模块 scrollpage 模块 logs 模块 codecs 模块

struct 模块 random 模块 Form e32dbm 的运用 调用系统进度条 marshal 模块用法

add 模块作者是飞影 7610,含有一个 Add 主类,有三个功能,分别为: 1)返回路径--file 方法 2)返回表情地址--face 方法 3)打开帮助--about 方法 1)file 方法: file(path,ext=[],title=?选择文件?.decode(?utf8?)) path 为路径 ext 为文件后缀 title 为标题 2)face 方法: face(ini,mbm=None,title=?选择表情?.decode(?utf8?)): ini 为配置文件路径 mbm 为 None 时既表示它的会路径名与 ini 为配置文件路径相同,只是后缀名 为.mbm title 为标题 此方法通过传递一个 ini 配置文件全路径名来选择表情代码

ini 配置文件格式为: 标题 1,face/1.gif 标题 2,face/2.gif 3)about 方法: about(path,title=?关于帮助?.decode(?utf8?)): path 为帮助文件全路径名 title 为标题

进度条模块使用方法: import progressbartw pb = progressbartw.ProgressBarTW() pb.begin_progress(500) for i in range(500): pb.do_progress(i) pb.end_progress() 注意 500 为你要的进度总数 (修改版) 作者:飞影 7610

progressbartw(修改版) 不用先定义窗口就可以使用了,可直接替换旧版本 示例代码如下(模块中已内置测试代码,可用 ped 直接测试):def ru(s):return s.decode(?utf-8?) # ProgressBarTW(1,1) # 参数 1:1 为系统字体,窗口在中间(2 为大字体,窗口偏下) # 参数 2:1 为后台时隐藏进度条,0 为不隐藏 # 两个参数都可缺省,缺省值都是 1 p = ProgressBarTW(1,1) # p.set_window_size((176,36)) # 可以自定义窗口大小

p2 = ProgressBarTW(2,0) # p2.set_window_size((176,36)) # 可以自定义窗口大小 p.begin_progress(5) # p.begin_progress(5,ru(?当前任务进度?)) # 可自定义标题 p2.begin_progress(5) for i in xrange(5): p.do_progress(i) p2.note_text=(ru(?任务进度 (%d/%d)?))%(i 1,5) p2.do_progress(i) p.end_progress() p2.end_progress()

注:最好不要替换原来的模块,因为此修改版跟原版的功能存在差别, 你可以放在脚本运行目录中来使用

下面列出了一些在 os 模块中比较有用的部分。它们中的大多数都简单 明了。

os.getcwd()函数得到当前工作目录,即当前 Python 脚本工作的目录路 径。

os.getenv()和 os.putenv()函数分别用来读取和设置环境变量。

os.listdir()返回指定目录下的所有文件和目录名。

os.remove()函数用来删除一个文件。

os.system()函数用来运行 shell 命令。

os.path.split()函数返回一个路径的目录名和文件名。例如

os.path.split('/home/swaroop/byte/code/poem.txt') ('/home/swaroop/byte/code', 'poem.txt')

os.path.isfile()和 os.path.isdir()函数分别检验给出的路径是一个文件还 是目录。类似地,os.path.exists()函数用来检验给出的路径是否真地存 在。

利用 contacts 模块可以选择联系人 import contacts, appuifw db = contacts.open() names = [] numbers = [] for i in db: names.append(db.title) num = db.find('mobile_number') if num: #读取所有的联系人

numbers.append(num[0].value) # first mobile else: numbers.append(None) i = appuifw.selection_list(names) print 'number =',numbers #选择列表显示所有已读取

加入 flashy(扩展模块)可以发闪信: import flashy flashy.flashsms_send(u'012345678',u'Hello world!')

zlib 模块主要用来压缩数据用的,主要讲一下可用函数。 1、compress()压缩数据。 2、decompress()解压指定已压缩数据。 3、crc32()计算校验 CRC-32 值。 shell 界面 >>> import zlib >>> s='license for morein for mation Ped' >>> len(s) 33 >>> t=zlib.compress(s)#压缩字符串 s >>> len(t) 36

由于原来的长度小于字典长度 所以压缩后反而更大, 但是文件大的话就会有压缩的效果
>>> u=zlib.decompress(t)#解压字符串 t >>>print u

'license for morein for mation Pd'

#一个字符串 CRC-32 值是不会变的,不管压缩前或解缩后,理论应该 可以计算一个文件的 CRC-32 的值 >>> zlib.crc32(s) 1644948177 >>> zlib.crc32(u) 1644948177 如果两个返回值不同,说明解压时出了问题。

开发作者:飞影 7610 模块名称:fy_marage 模块版本:v1.0 测试机型:N7610 测试人员:飞影 7610 支持机型:s60 所有机型 作者邮箱: feiying7610@yeah.net 作者 QQ: 654709957 模块介绍:这是一个类似文件管理的模块,集合了重 命名、新建目睹、删除、快速找查与详细找查功能。 同时模块运用了全新的算法, 打开目录时, 速度特快, 还可显示文件大小,加上运用了支持快捷键的图形菜 单,运用起来更方便。
模块快捷键如下:

1 键--过滤不含中文名的文件与文件夹 2~9 键--快速找查 0 键--详细找查 c 键--返回上一找查状态 *键(短按)--跳至上一页 *键(长按)--跳至顶端 #键(短按)--跳至下一页 #键(长按)--跳至底端

此模块只有一个 Manager 类,创建实例后,通过调用 AskUser 方法来获 取路径。AskUser 方法包含 5 个参数,依次为: (1)path: 设定初始目录,缺省值为空 (2)find:设定要找查文件方式,有三种方式,’file’、’***’ 和’all’。’file’方式下找查对象为文件,’***’方式下找查对象 为文件夹,’all’方式下找查对象可以为文件也可以为文件夹。缺省 值为’file’ (3)ext:设定找查文件对象的后缀名,只有在 find 设定为非’***’时 才有效。缺省值为 [] (4)mark:设定是否为标记模式,标记模式下返回的是一个列表,返之 为字符串,缺省值为 False,即非标记模式 (5)back:设定是否允许用户返回 path 的上级目录,缺省值为 True, 既允许返回上级目录。按返回时,返回 None 注意:非标记模式下返回的字符串是没有定义 decode(’utf8’)编码

的,如果你要打印请加上.decode(’utf8’),否则令中文时会乱码 为何不加编码?因为我们得到文件路径后, 往往是要作为文件对象来处 理,如果已经定义 decode(’utf8’)编码了,又得定义 encode(’utf8’)了 而标记模式下返回的列表中的元素也是没有定义编码的,这一点要注 意。

e32 模块提供了 Symbian 系统级的服务, 可以实现 UI 以及标准 Python 库无法完成的功能。 模块函数 以下函数都定义在 e32 模块中(同时没有定义在任何类中): ao_yield() 使高优先级 AO 进入等待,让步于其他对象的调度。注意,可能造成 UI 运行在线程上下文环境中。 (注:该函数一个常用的地方是配合键盘事件的响应。例如,要求用户按 某个特定的按键之后才能执行后续操作。) ao_sleep(interval [, callback ]) (注:中括号里面是可选项,下同。ao_sleep(延时秒数数值,回调函数(可 选)) 延时 interval 秒,但不将其他调度挂起。如果设定了 callback,则延时

结束后会调用 callback。 ao_callgate(wrapped callable) 将 wrapped_callable 封装到返回的 callgate 对象中(可在任何线程中调 用 ) 。 于 是 , 调 用 callgate 的 同 时 也 会 自 动 在 上 下 文 环 境 中 调 用 wrapped_callable,同时可传递自变量。这是 Symbian 系统中典型的 AO 封装方法。 (注: ao_callgate(封装对象)) drive_list() 返回可用的驱动器列表。 (注:一般有手机闪存盘 c、内存缓冲盘 d、 存储卡 e、固件盘 z) file_copy(target name, source name) 将源文件复制为目标文件。必须是完整路径。 (注:file_copy(目标文 件路径,源文件路径)) in_emulator() 如果当前程序是在模拟器上运行则返回 1,在手机上运行则返回 0。 set_home_time(time) 设置手机时间。 pys60_version 返回 PyS60 的版本及附加信息。 示 例: >>> import e32 >>> e32.pys60_version ?1.2 final?

pys60_version info 返回一个包含 PyS60 版本信息的五元组:(主版本号、副版本号、附加版 本号、发布类型、序列代号)除发布类型是字符串外,其他都是整型数 据。如果发布类型不是“final”则意味着这是一个还在开发中的版本。 例如:PyS60 1.2 将返回 (1, 2, 0, ?final?, 0)

s60_version_info 返回一个包含 PyS60 SDK 版本信息的二元组。 其中: ?(1, 2 )代表 S60 1st ?(2, 0 )代表 S60 2nd ?(2, 6 )代表 S60 2nd FP2 ?(2, 8 )代表 S60 2nd FP3 ?(3, 0 )代表 S60 3rd Python 代码 >>> import e32 >>> e32.pys60_version ?1.2.0 final? >>> e32.pys60_version_info (1, 2, 0, ?final?, 0) >>> e32.s60_version_info (2, 0) >>> is_ui_thread() 如果运行在 UI 线程上下文环境中则返回 True,否则返回 False。 start_exe(?lename, command [,wait ]) 启动一个 Symbian 系统的可执行文件,并用其执行某些操作。如果设

定了 wait,则会激活同步监测用于捕获程序的退出状态。其中,正常退 出返回 0,异常退出返回 2。 (注:start_exe(完整的可执行文件路径(Unicode 编码),命令参数,程序 退出监测(可选)) start_server(?lename) 以独立进程运行 Python 脚本,作为后台服务程序。 需要注意的是,这种情 况下无法调用 appuifw 模块。 (注:start_server(完整的可执行文件路径 (Unicode 编码)) reset_inactivity() 重置设备空闲时间。与此同时,背景灯将被点亮。 (注:设备空闲是指用户没有任何按键动作。这个函数可以用来保持背 景灯长亮。) inactivity() 返回用户上一次按键动作的时间。

e32 — Symbian 系统级的服务模块: Ao_lock 类

Ao_lock()类 生成 Ao_lock 实例。此 AO 依赖于同步服务。它可以在主线程上运行, 但不影响 UI 事件响应。如果程序的某个线程处在 Ao_lock 中,那么它就 不 能 关 闭 。 而 且 , 不 得 使 用 多 个 Ao_lock.wait, 否 则 会 引 起 AssertionError。

Ao_lock 实例支持下列方法: wait() 处在 Ao_lock 中的线程将被挂起,直到获得释放信号。需要注意,仅支 持一个挂起,所以绝对不能递归调用。只有产生 lock 对象的线程才能 调用 wait,而进入 wait 后,其他 AO 仍处于激活状态,所以 UI 不会被冻 结。然而这就面临一个问题,UI 响应可能处在 Ao_lock 中的线程上下文 环境中。这一点必须在设计逻辑结构时考虑。 signal() 发出信号,释放被挂起的线程。 e32 — Symbian 系统级的服务模块: Ao_timer 类 可以说, Ao_timer 是对 e32.ao_sleep 的扩充。 因为,在 e32.ao_sleep 产生 的休眠没有结束的情况下用户强行退出程序,可能造成严重的后果。 Ao_timer 正是为解决这个问题而设计的,它产生的休眠即使没有结束, 用户也可以安全地退出程序。

Ao_timer()类 程序的某个线程处于 Ao_timer 休眠时 ,理论上不应该退出。每个 Ao_timer 实例只能产生一个休眠。生成 Ao_timer 实例。此 AO 依赖于 休眠服务。它可以在主线程上运行,但不影响 UI 事件响应。 Ao_timer 实例支持下列方法: after(interval [,callback ]) 休眠 interval 秒,不影响程序调度。如果设定了 callback,则在休眠结

束后调用 callback。 (注:after(休眠的秒数数值,回调函数(可选))) cancel() 将尚未结束的休眠取消。

sysinfo — 获取系统信息 sysinfo 模块用于获取 S60 手机的系统信息。注 意: ring type()不支持 S60 1st 机型。

sysinfo 模块中含有下列函数: battery() 获取当前电池的电量信息。 S60 2ND FP1(S60 2.1)之前的手机满格为 7, S60 2ND FP1 之后的手机满格为 100。电量耗尽则为 0。对于模拟 器,这个数值永远是 0。 注 意: 如果手机正在充电,那么就不能获得正确数值。

display_twips() 获取显示高宽值,以缇(twip)为单位。关于缇的定义参阅章节 10。 display_pixels() 获取显示高宽值,以象素为单位。

free_drivespace() {u’C:’100} 获取驱动器可用空间信息。形如 。注意,盘符后面跟着 一个冒号(:) imei() 获取手机的 IMEI 码。对于模拟器,永远是 u’000000000000000’.

max_ramdrive_size() 获取手机支持的内存上限。 total_ram() 获取手机的内存总量。

free_ram() 获取手机的可用内存量。

total_rom() 获取手机的固件存储量。

ring_type() 获取当前响铃类型。不支持 S60 1st 机型。







’normal’,

’ascending’,

’ring

once’, ’beep’,’silent’. (注:依次为“连续响铃、渐强、响铃一次、蜂鸣、无声”) os_version() 获取手机的系统版本信息。 用三元组表示:(主版本号,副版本号,附加版 本号) 数值范围定义如下 主版本号:0 - 127 副版本号 :0 - 99 附加版本号:0 - 32767

signal_bars() 获取当前的网络信号强度。用 0-7 表示:0 即无信号,7 即信号最强。 对于模拟器,这个数值永远是 0。

signal_dbm() 获取当前的网络信号强度,以 dBm 为单位。对 SDK 2.8 以上版本有效。 对于模拟器,这个数值永远是 0。 sw_version() 获取软件的版本信息。形如:u?V 4.09.1 26-02-04 NHL-10 (c) NMP? 对于模拟器,这个返回信息永远是 u?emulator?.

Cfileman 模块
fileman = cfileman.FileMan() 创建一个对象类 FileMan ,进一步,我们有以下属性

fileman.drive_space()返回字典的吊称和磁盘的大小(自由和总)在字 节

fileman.listdir (路径[ , filteratt , filtersort , typeflag ] ) 返回一个元组的文件夹和文件选定的目录路径(路径必须以双引号)

(1)filteratt 设置要显示的文件类型
EAttMatchMask -显示所有对象(文件夹,隐藏文件和系统文件) ,默认值 EAttNormal -任何文件或文件夹的隐藏和系统属性 EAttReadOnly -只读 EAttHidden -隐藏 EAttSystem -系统 EAttDir - 目录 EAttArchive -存档 EAttMatchExclude -除去提供的属性外的所有文件,例如 EAttMatchExclude | EAttHidden 就是显示非隐藏的文件

EAttMatchExclusive -包括所有符合提供属性的文件,例如 EAttMatchExclusive | EAttHidden 显示隐藏的文件

(2)filtersort 设置文件排序
ESortNone -默认 ESortByName -按名字 ESortByExt -按类型 ESortBySize -按文件大小 ESortByDate -按最后修改日期 EAscending -升序排列,默认 EDescending -降序 EDirDescending -只有文件夹中,使其降序排列

(3)typeflag 管理的类型
返回的数据默认为 2 元组,文件夹和选定文件的目录, 如果您设置 typeflag = 0 则函数返回一个元组 fileman.set_att (路径, set_att [ , clear_att ] )设置提供路径文 件或文件的属性 set_att 属性或 clear_att 删除 EAttReadOnly -只读

EAttHidden -隐藏 EAttSystem -系统 EAttArchive -存档

fileman.get_att (路径) #的属性返回一个对象路径 fileman.mkdir (路径[ , revflag ] )创建一个文件夹路径论点 revflag 负责递归设立失踪的文件夹,默认情况下它是 0 fileman.rename(pathOld , pathNew )重命名对象 pathOld 旧名字 pathNew 新名字

filename.file_copy(pathOld , pathNew [ , revflag ] )复制文件 pathOld pathNew (路径必须以双引号) revflag 参数可能如下 EOverWrite -覆盖该文件 ERecurse -递归创建丢失的文件夹这可能是通过运营商共享|

fileman.file_move(pathOld , pathNew [ , revflag ] )

移动文件 pathOld pathNew (路径必须以双引号) revflag 参数可能如下 EOverWrite -覆盖该文件是否已经存在 ERecurse -递归创建丢失的文件夹这可能是通过运营商共享

fileman.del(路径)删除对象的路径,如果此目录被删除,所有的附件

fileman.set_callback ()设置回调函数(通常通过一个参数的 int 类型) 被称为当您删除,复制和移动文件时 如果您删除一个文件的功能是传递的值为 0 时,该文件删除,并取消 1 时 完成如果您夊制/移动大文件的传输功能 skopirovavschihsya 数据大小(方便进度栏)

appuifw 模 块 提 供 了 S60UI 应用程序框架。

注 意:

此服务必须运行在主线程上下文环境,更准确地说是 UI 程序的初始化

线程。 UI 控件管理着所有的应用程序窗口,这是很显然的。 对于含有多个视图的程序,可以用导航面板的选项卡来切换视图。 对话框比普通 UI 控件享有更高优先级,这就是说,对话框往往都会置 顶。 UI 控件是由 Python 类型构建的,可用的类型有: *Text *Listbox *Canvas 一旦构建了程序主体(app.body),相应的 UI 控件就会随之出现在屏幕 上。 Form 是一种万能的对话框类型。 Content_handler 用于实现 UI 程序之间的高层共性对话,以期简化 MIME 类型的操作内容。 下列函数定义了常用的对话框: *note *query *multi_query *s election_list *multi_s election_list *popup_menu 一旦执行相应函数,就会出现置顶的对话框,读取用户 输入的信息以及确定或取消等操作。然而 Form 是 特例,它以实例操 作,所以只有被执行以后才能产生对话框。 软键响应默认为 S60 平台的初始设定。 在没有对话框的情况下, 按右软 键退出,按左软键弹出选项菜单。 PyS60 中可以非常简单地设计菜单 和右软键事件,同样地,软键事件对话框也可以自行设计,比如 OK 和

Cancel(中文机型显示为"确定"和"取消")。 但是如果 要做出独特的 对话效果,那么最好用 Form。

模块函数
以下函数都定义在 appuifw 模块中(同时没有定义在任何类中): available_fonts() 获取手机可用的字体列表(Unicode 编码)。 query(label, type [, initial_value ]) (shagon 注:query(提示信息,输入类型,缺省值(可选)) 生成一个单域对话框。label 是需要显示的提示信息,type 是要求输入 的数据类型,有以下几种: *“text“ *“code“ *“number“ *“date“ *“time“ *“query“ *“float“ 如果设定了 initial_value,它将作为输入数据的缺省值(注:意思是如果 用户不输入任何数据而直接按确定,那么就返回这个值)。它有如下定 义: *对于文本输入框(“text“ , “code“ ),缺省值是 Unicode 字符。 *对于数值输入框( “number“ ),缺省值是数字。 *对于日期输入框(“date“),缺省值是上个午夜与时间原点的间隔。 确认对话框(“query“)和时间输入框(“time“)都没有缺省值,它们分别返 回 True/None 和相应的时间数值。对于浮点数输入框(“float“)即便设定

了默认值也无效。所有的对话框,如果用户取消都返回 None。 multi_query(label_1, label_2) 生成一个双域文本输入对话框(Unicode 编码),返回二元组(label_1, label_2)。如果取消则返回 None。 (注:multi_query(第一项提示信息,第二项提示信息)) note(text , [type , [global] ]) 生成一个提示对话框。text(Unicode 编码)为要显示的通知信息,type 是提示类型,有“info“,“error“和“conf“(注:依次为错误通知、信息通 知、确认通知)。缺省为“info“ 如果设定了一个非零整数作为 global ,将生成一个全局通知。意思是 说即便是后台程序调用也会弹出提示对话框。 type 支持的对话框与标准 对话框完全一样。 (注:note(通知信息,通知类型(缺省为“info“),全局参数(可选))) popup_menu(list [, label ]) 生成一个弹出菜单列表。支持一元组或多元组(必须是 Unicode 编码)。 一元菜单直接显示全部项目, 多元菜单根据用户操作显示相应项目。返回选中的项目,如果取消则返 回 None。 (shagon 注:popup_menu(菜单表项,菜单主标题(可选)) selection_list(choices [, search_eld=0 ]) 生成一个选择列表。返回用户选中的项目,如果取消则返回 None。 choices 是列表项。search_eld 是查找面板参数,缺省为 0 即禁用,1 为 启用。

注:selection_list(列表表项,查找面板参数(缺省为 0 即禁用))。当列表 项目太多的时候才适合启用查找面板快速找到选项。 但项目很少的情况 下应该禁用,否则反而影响用户视线。) multi_s election_list(choices , style=“checkbox“, search eld=0 ) 生成一个多选列表或可标记列表。返回用户选中的所有项目(一个元 组),如果取消则返回 None。 choices 是列表项。style 是列表类型,有“checkbox“和“checkmark“, 分别生成多选列表和可标记列表. 缺省为“checkbox“。在多选列表中直 接用导航键选中项目,而在可标记列表中还需要笔形键的配合。 search_eld 是查找面板参数,缺省为 0 即禁用,1 为启用。 (shagon 注: multi_s election_list(列表项, 列表类型(缺省为“checkbox“), 查找面板(缺省为禁用))。 当列表项目太多的时候才适合启用查找面板快速找到选项。 但项目很少 的情况下应该禁用,否则反而影响用户视线。) 示 例: tuple = appuifw.multi_s search_field=1) election_list(L, style=“checkmark“,

事实上,一旦调用了 appuifw 模块,马上就会生成唯一的 application 实例,不过实例名称被改为 app。

Application 类
Application 实例含有以下属性: body 设定程序窗体。 目前支持 Text, Listbox, Canvas 和 None。 (shagon

注:None 就是使用缺省窗体) exit_key_handler 设定右软键响应事件。不设定或设定为 None 都恢复 为缺省设定。 (shagon 注:缺省设定为"退出"、"取消"等操作) menu 设定程序菜单。有两种类型: *(title, callback) 普通菜单。 *(title, ((title, callback)[ ... ])) 含有子菜单的多级菜单。 title(U nicode 编码)是菜单项标题,callback 是其响应事件。 菜单项的上限是 30 个。 示 例: appuifw.app.menu = [(u“Item 1“, item1), (u“Submenu 1“, ((u“Subitem 1“, subitem1), (u“Subitem 2“, subitem2)))] screen 设定 UI 屏幕模式。 可选模式有“normal“, “large“和“full“(shagon 注:依次为标准屏、大屏、全屏) 示 例: appuifw.app.screen=“normal“ #(标准屏.显示标题面板和控制面板.) appuifw.app.screen=“large“ #(大屏.显示控制面板.) appuifw.app.screen=“full“ #(全屏.) title 设定标题面板的标题。必须是 U nicode 编码。(注:只有标准屏模 式下才能显示) focus 程序焦点。参数 0 表示丢失焦点,1 表示恢复焦点。 当程序在前

台与后台之间切换,或者进入/退出屏幕保护时,将涉及到焦点的问题。 (注:可以这样理解,如果设定了焦点,那就可以在切换到前台时执行 一种操作,切换到后台时执行另一种操作。一般地,按挂机键(红键)就 是让程序在后台运行。) 示 例: >>> import appuifw >>> def cb(fg): ... if(fg): ... print “foreground“ ... else: ... print “background“ ... >>> appuifw.app.focus=cb >>> #程序切换到后台将显示: >>> background >>> #程序切换到前台将显示: >>> foreground 注 意: 如果焦点事件设定有误, 将引起程序错误。 例如在诺基亚 6600 上有可能引起无法停止的 TypeError。 orientation 设定程序 风格 ( 只适用于 S60 3rd 机 型) 。可 选项 有: “automatic“,“portrait“,“landscape“.(shagon 注: 依次为“自动“, “肖像“, “风景“)。缺省值是“automatic“ 。 Application 实例支持下列方法: activate_tab(index)激活选择卡视图。index 是选项卡组(从 0 开始)。 full_name()返回当前在 Python 解释器里运行的程序名称(U nicode 编 码)。

uid()返回当前在 Python 解释器里运行的程序 UID(U nicode 编码)。 set_exit()在当前操作结束后退出程序。 set_tabs(tab_texts ,callback=None )设定选项卡。tab_texts 是一列 U nicode 字符串。当用导航键在选项卡之间切换,可以变更视图, 同时 调用相应的 callback。如果 tab_texts 为空或只有一个元素,上述功能 无效。(注:set_tabs(选项卡项目,回调函数(可选))) layout(layout_id)注 意:只适用于 S60 2nd FP3 以上机型。返回

layout_id 项目的大小和位置(二元组)。位置以屏幕左上角为起始点。 layout_id 是定义在 appuifw 模块中的常量: EScreen 屏幕 EApplicationWindow 程序窗体(占据整个屏幕的窗体) EStatusPane 状态面板(大部分程序都有状态面板) EMainPane 主面板(所有程序都有主面板) EControlPane 控制面板 ESignalPane 信号面板(显示信号强度) EContextPane 上下文面板(显示运行中的程序)(shagon 注: 通常是显示 程序的图标) ETitlePane 标题面板(显示程序名称或自定义标题) EBatteryPane 电池面板(显示电池电量信息) EUniversalIndicatorPane 通用指示器面板(引起用户的注意) (shagon 注:比如屏幕右上角的那个电池图案) ENaviPane 导航面板(显示应用程序状态、用户输入状态以及其他相关

信息) EFindPane 查找面板(用选择列表取代弹出列表) EWallpaperPane 壁纸面板 EIndicatorPane 指示器面板(引起用户注意) EAColumn 显示小图案和小字标题 EBColumn 显示大图标和大字标题 ECColumn 显示用户输入,与 EDColumn 配合。 EDColumn 显示附加图标,与 ECColumn 配合。 EStaconTop landscape 的状态面板与控制面板顶部布局 EStaconBottom landscape 的状态面板与控制面板底部布局 EStatusPaneBottom landscape 的状态面板底部布局 EControlPaneBottom landscape 的控制面板底部布局 EControlPaneTop landscape 的状态面板顶部布局 EStatusPaneTop landscape 的控制面板顶部布局 示 例: >>> import appuifw >>> appuifw.app.layout(appuifw.EMainPane) ((176, 144), (0, 44)) >>> #诺基亚 N70 的主面板大小和位置

Form 类型
Form 具有非常大的设计自由度,更通俗点说,它是一个万能对话框。
用它可以设计出独特的复合对话框,甚至挣脱标准对话框的束缚,做出个性效果。

Form(fields [, flags=0 ]) 类 生成 Form 实例。fields 是域描述列表:(label, type[, value ]) 其 中 label 是 U nicode 字 符 串 , 作 为 标 题 名 称 。 type 是 “text“,“number“,“date“,“time“,“combo“,“float“中的一个,分别对应着:U nicode 字符串、 普通数字、Unix 日期浮点数、Unix 时间浮点数、([choice label ...], index) 以及普通浮点数。 对于“float“,即便设定了缺省值,通常也不会显示在 UI 中。 Form 通过各种属性值来配置对话框。包括域文字信息以及读取用户输入信息。 Form 实例含有以下属性: flags 属性标记。目前可用的标记有: FFormEditModeOnly 设置 Form 为可编辑模式。 FFormViewModeOnly 设置 Form 为不可编辑模式。 FFormAutoLabelEdit 允许终端用户编辑 Form 的标题项。 FFormAutoFormEdit 允许终端用户增加或删除 Form 域。 注意,目前这项功能仍处于试验阶段,不支持所有 SDK。 FFormDoubleSpaced 生成双行距布局。输入域占据两行,第一行显示项目标题,第二行用 于数据处理。 menu 设置 Form 菜单项: (title, callback)。 其中 title 是 U nicode 字符串,用于显示菜单项名称,callback 是事件响应。 save_hook (shagon 注:简单一句话,就是用来实现多级连锁对话框。) 生成一个用于接收 自变量并返回布尔值的可请求对象,当用户试图保存当前对话框内容时就会调用这个对象。 随之返回的布尔值决定了是否在 UI 中显示新的对话框, 新对话框是依据前个对话框内容构 建的。如果返回值是 False,那么将恢复原对话框。 Form 实例支持下列方法: e xecute() 执行对话框的生成,使其在 UI 中可见。 i nsert(index, field_descriptor) 向 Form 中插入域描述符(先于 index)。 pop() 从 Form 中移除域描述符并返回这个值。 length() 统计 Form 中的域描述符总数。 下标 f 用于访问或修改 Form f 的第 i 个单元。 不过上面已经提到 FFormAutoFormEdit 仍 处于试验阶段,也就是对目前来说,要修改运行中的 Form 单元结果可能不那么理想。

Text 类型
Text 是文字处理控件。 Text 实例含有以下属性:

color 文本颜色。与 graphics 模块中的颜色定义相同。 focus 控件焦点(布尔值。Ture:恢复焦点,False:丢失焦点)。 通常编辑器控件需要用到导航栏(就像选项卡一样),所以同时要使用导 航面板控件。 font 文本字体。有两种方法来进行设定: *直接定义字体,形如 u“Latin12“。如果手机不支持这个字体则定义无 效。 可以用 appuifw.available_fonts 来获取手机可用字体列表。 示 例: t = appuifw.Text() t.font = u“albi17b“ #设为 17 号粗斜体 t.font = u“LatinPlain12“#设为拉丁 12 号常规字体

*定义模式字体。 可 选 模 式 有 : “annotation“, “title“, “legend“, “symbol“, “dense“, “normal“(shagon 注:依次为注解、标题、图注、记号、密集、常规等 模式。) 设定当前字体示例: t.font = “title“ #设为标题型字体 校对当前字体示例: u nicodeFont = t.font 字体属性值必须是 U nicode 字符串,而且代表手机可用的字体,否则

无效。 (shagon 注:事实上,第一种方法能够选择全部可用字体,而第二种仅 能使用其中挑选出的样式,好处是便于记忆和书写。) highlight_color 文本加亮颜色。与 graphics 模块中的颜色定义相同。 style 文本样式。相关标志属性在 appuifw 模块中被定义。样式标志可以组合 使用,通过“|”符号连接。 样式标志被划分为两类:一种定义文本,另一种定义加亮。下面分别作 说明。 文本样式标志: STYLE_BOLD 粗体文字 STYLE_UNDERLINE 带下划线文字 STYLE_ITALIC 斜体文字 STYLE_STRIKETHROUGH 带删除线文字 加亮样式标志: HIGHLIGHT_STANDARD 标准加亮(shagon 注:在文字后面生成一个标准矩形加亮框) HIGHLIGHT_ROUNDED 圆角加亮(shagon 注:在文字后面生成一个圆角矩形加亮框) HIGHLIGHT_SHADOW

阴影加亮(shagon 注:生成阴影文字,即复制当前文字用加亮色填充, 置于斜后方) 对于一串文字只允许使用一种加亮样式, 无论这串文字使用了一种还是 多种文字样式。 示 例: t = appuifw.Text() #与以下文字样式及其组合设定类似的都有效: t.style = appuifw.STYLE_BOLD t.style = appuifw.STYLE_UNDERLINE t.style = appuifw.STYLE_ITALIC t.style = appuifw.STYLE_STRIKETHROUGH t.style = (appuifw.STYLE_BOLD| appuifw.STYLE_ITALIC| appuifw.STYLE_UNDERLINE) #与以下加亮样式设定类似的都有效: t.style = appuifw.HIGHLIGHT_STANDARD t.style = appuifw.HIGHLIGHT_ROUNDED t.style = appuifw.HIGHLIGHT_SHADOW #下面这个加亮样式组合是无效的,请勿尝试: t.style = (appuifw.HIGHLIGHT_SHADOW|appuifw.HIGHLIGHT_ROUNDED) Text 实例支持下列方法: add(text) 在光标处插入文字。 (shagon 注:add(U nicode 字符串)) bind(event_code, callback) 设置按键响应(按 event_code 对应键就会调用 callback)。 键位在 key_codes 模块中被定义。特别地,bind(event_code, None)用于 清除已设键位的事件响应。当然,事实上按键事件最终还是被 UI 控件 所管理的。

clear() 清除所编辑的内容。 d elete([ pos=0, length=len() ]) 从光标 pos 处开始删除长度为 length 的文字。 get_pos() 返回当前光标位置。 len() 返回编辑中的文字长度。 get([ pos=0, length=len() ]) 检索从光标 pos 处开始长度为 length 的文字。 set(text) 置入文字 text(U nicode)。 set_pos(cursor_pos) 将光标移动到 cursor_pos 位置。

Listbox 类型
Listbox 实例是一个列表。正如在 Symbian 中常见的那样,它既可以是 单行距布局,也可以是双行距布局。要使用这样的图标需要 MBM 或 MIF 格式文件。

Listbox(list, callback)类 生成 Listbox 实例。list 是表单项目,callback 是选项相应的事件响应。 其中 list 可以有如下几种: 单行距列表。形如 [item1,item2] 双 行 距 列 表 。 形 如

[(item1,item1description),(item2,item2description)](shagon 注:(项目名 称,项目描述)) 带图形的单行距列表。形如[(item1,icon1),(item2,icon2)](shagon 注:(项 目名称,图形描述)) 带 图 形 的 双 行 距 列 表 。 形 如 [(item1,item1description,icon1), (item2,item2description,icon2)](shagon 注:(项目名称,项目描述,图 形描述)) 示例:生成一个带图标的单行距列表—— icon1 = appuifw.Icon(u“z:\\system\\data\\avkon.mbm“, 28, 29) icon2 = appuifw.Icon(u“z:\\system\\data\\avkon.mbm“, 40, 41) entries = [(u“Signal“, icon1), (u“Battery“, icon2)] lb = appuifw.Listbox(entries, lbox_observe) Listbox 实例具有下列方法和特性: bind(event_code, callback) 设置按键响应(按 event_code 对应键就会调用 callback)。 键位在 key_codes 模块中被定义。特别地,bind(event_code,None)用于 清除已设键位的事件响应。当然,事实上按键事件最终还是被 UI 控件 所管理的。 current() 返回当前项目的索引值。 set_list(list [, current ]) 设定列表。其中 list 的定义与 Listbox(list, callback)中一样。可选项 current 指定列表的焦点项目,其值是焦点项目的索引值。 size

获取列表大小(宽度,高度)。只支持 S60 3rd 以上机型。 position 获取列表位置(左上角坐标)。只支持 S60 3rd 以上机型。

Icon 类型
Icon 实例用于实现在列表中使用图标。 Symbian 有一种特殊的压缩图片格式叫做 MBM,它包含了多副位图, 通过编号调用所需图片。通常 MBM 文件还有一个后缀名为 mbg 的页 眉文件,用于描述每个位图。比如“avkon.mbm“就有“avkon.mbg“(在 SDK 中能找到它们)。更多信息请参阅 SDK 文档[4](“How provide to

Icons”)。同时可以了解一下如何将位图 集合起来转换成

MBM 文件,SDK 提供了这种工具。 S60 2nd FP3 引入了一种全新的格式, 叫做 MIF(Multi-Image File, 多

图文件)。它与 MBM 类似,将多个文件压缩并保存为单一文件。注意, 只有符合 SVG-T 标准的文件才能被压缩(SVG-T:Scalable Graphics Tiny,可缩放矢量图形标准简化版),参阅[10] 。 Icon(lename, bitmap, bitmapMask) 类 创建图标。 filename 是完整路径, 只能是 MBM 或 MIF 文件(仅 S60 2nd FP3 支持 MIF)。bitmap 是位图,bitmapMask 是遮照,都取其索引值。 示 例:以下创建一个标准的信号符号图标 icon = appuifw.Icon(u“z:\\system\\data\\avkon.mbm“, 28, 29) Vector

Content_handler 类型 Content_handler 实例根据 MIME 类型处理数据内容。 Content_handler([ callback ])类 生成 Content_handler 实例。如果同时设定了可选项 callback,那么当 处理程序结束时将调用这个 callback. Content_handler 实例支持下列方法: open(filename) 在处理程序中打开一个已注册为 MIME 类型的文件。该程序将被嵌入 到主叫线程中。 程序结束时将调用 callback(如果已设)。 open_standalone(filename) 在处理程序中打开一个已注册为 MIME 类型的文件。该程序将在独立 的进程中运行。 注意,在这种情况下不会调用 callback(不论是否已设)。

Canvas 类型
Canvas 是用于处理按键事件和屏幕绘制的 UI 控件。 Canvas([ redraw_callback=None, event_callback=None, resize_callback=None ]) 类 创建 Canvas。可选项是按键事件响应描述,按下指定按键就会做出相 应的事件响应。 注 意:避免死循环!比如 callback 直接或间接指向了 Canvas 本身就

可能造成无尽的环路调用。 redraw_callback 在需要重绘屏幕的时候就自动调用。 这应该很好理解, 比如用户临时运行其他软件然后又返回,或者菜单弹出以后又消失,这 些情况都需要重绘屏幕。一般来说,可以根据左上角位置和右下角位置 来确定重绘的区块范围,不过大多数情况下还是习惯于直接重绘整个 Canvas。 event_callback 将在用户操作按键时被调用。按键事件一共有三种: EEventKeyDown, EEventKey, EEventKeyUp(shagon 注:分别是按下、 按住、 放开)。 当用户按下按键时将发生 EEventKeyDown 和 EEventKey 事件,而当用户放开按键时将发生 EEventKeyUp 事件。 event_callback 的参数是一个字典(关联数组),它包含以下数据: *“type“: EEventKeyDown,EEventKey 和 EEventKeyUp 中的一个。 *“keycode“: 按键的 keycode。 *“scancode“: 按键的 scancode。 *“modifiers“:针对当前按键事件的操作描述。 键盘上的每个按键都有一个以上的 scancode,与它对应的可能没有 keycode,也可能有多个 keycode。这是因为 scancode 对应的是手机的 物理按键,而 keycode 是操作系统针对物理按键生成的特定编码。 (shagon 注:可以更简单地理解,对于同型号手机,物理按键是一样的, 所以 scancode 是一样的。但是手机系统可能是大陆行货(简体中文)、港 版(繁体中文)或者欧版(英文)等等,它们的字体集是不同的,所以 keycode 是不同的。) 例如,用诺基亚无线键盘 (SU-8W) 按下 A 键,

scancode 是 65, 而 keycode 可能是 65 也可能是 91(大写“A“的 ACSII 编码是 65, 小写“a“的 ACSII 编码是 91), 不论是否按住 Shift 键或已按 下 Caps Lock 键。 在 key_codes 模块中定义了 scancode 和 keycode。 以下按键有特殊规定: *轻按编辑键(也称笔形键)将产生特殊的粘滞效果。 (shagon 注:编辑 键通常用于组合按键,所以必须维持状态,即放开时不会立刻产生 EEventKeyUp。但如果长按编辑键则无此效果。) *电源键和声控标签键无法进行检测。 (shagon 注:待机状态下长按右 软键就启动声控标签) *每当按下右软键,就会调用 appuifw.app.exit_key handler。 (shagon 注:不论你是否重新定义了右软键事件响应) 其中,挂机键、菜单键、电源键以及声控标签键都有特殊功能,强制性 定义,不得更改。 resize_callback 将在窗体大小改变时被调用。根据二元组变量(宽度值, 高度值)来新建窗体。 Canvas 实例含有以下属性: size 一个二元组:(宽度值,高度值)。表示当前 Canvas 的大小。 Canvas 实例提供了标准的绘图方法。

InfoPopup 类型
注 意:只适用于 S60 3rd 以上机型。 InfoPopup 实例是一个用于消息提示的 UI 小控件。比如它可以产生置 顶的帮助信息,告诉用户如何操作。 当用户按下任意键或者到了指定 时间,这条消息就会自行消失。 InfoPopup() 类 生成一个 InfoPopup。 show(text,[ (x_coord, y_coord), time_shown, time_before, alignment ]) text 是显示在 InfoPopup 中的文字信息。 可选项中, (x_coord, y_coord) 指定 InfoPopup 的显示位置, time_shown 指定显示时长(以毫秒计),time_before 指定弹出延时(以 毫秒计),alignment 指定窗体调整方式。 缺省情况位置是(0, 0), time_shown5 秒, time_before 0 秒, alignment 指 定为 appuifw.EHLeftVTop alignment 可用值如下,它们都被定义在 appuifw 模块中: EHLeftVTop 水平方向左对齐,垂直方向顶端对齐 EHLeftVCenter 水平方向左对齐,垂直方向居中 EHLeftVBottom 水平方向左对齐,垂直方向底端对齐 EHCenterVTop 水平方向居中,垂直方向顶端对齐

EHCenterVCenter 水平方向居中,垂直方向居中 EHCenterVBottom 水平方向居中,垂直方向底端对齐 EHRightVTop 水平方向右对齐,垂直方向顶端对齐 EHRightVCenter 水平方向右对齐,垂直方向居中 EHRightVBottom 水平方向右对齐,垂直方向底端对齐 hide() 立即隐藏弹出窗体。 示 例: >>> import appuifw >>> i=appuifw.InfoPopup() >>> i.show(u“Here is the tip.“, (0, 0), 5000, 0, appuifw.EHRightVCenter) >>>

appuifw2 模块
来源:木狼
#输入法的操作只对自带的有效

import appuifw2,e32 cn=lambda s : s.decode("utf-8") print appuifw2.query(cn(" 吃 了 吗 ?"),"query",ok=cn(" 吃 了

"),cancel=cn("没有")) #ok 按键和 cancel 按键名称

text=appuifw2.Text(move_callback=None,edit_callback=None,scro llbar=1,skinned=1,word_wrap=0,t9=1,fixed_case=0) #move_callback 光标移动事件 #edit_callback 编辑事件,文本发生变化调用此功能 #scrollbar,右边的滚动条 #skinned,背景使用主题背景 #word_wrap 暂时没弄清有何用 #t9,英文的自动组词模式开关 #fixed_case 英文输入模式大小写开关 1 则只能输入大写字母

appuifw2.app.title=cn("你好") text.indicator_text=u"HELLO" #设置输入法左边的文字(默认输入法时显示) appuifw2.app.body=text #text.add(text.indicator_text)

text.insert(0,cn("Hello,how are you?")) text.insert(len(text),u"test.") #插入字符 text.set_pos(len(text)) text.apply(pos=3,length=-2) text.set_selection(0,9) #(pos,anchor)设置已选字符 print "(pos,anchor,text):",text.get_selection() #返回(pos,anchor,text)(光标,起点/终点,所选字符) text.set_word_wrap(1) #text.set_limit(10) #设置最多输入字符,(默认输入法有效) text.set_pos(len(text)) print "get word info=",text.get_word_info() #text.set_allowed_cases(appuifw2.EUpperCase) #ELowerCase,ETextCase,EAllCases #设置允许的输入法(默认输入法) #text.set_case(appuifw2.ELowerCase) #设置输入法 #text.set_input_mode(appuifw2.ENullInputMode) #设置输入模式 #text.set_undo_buffer(pos=0,length=-1)

#text.move(appuifw2.EFLineDown,select=1) #EFNoMoveMent #EFLeft,EFRight,EFLineUp,EFLineDown #EFPageUp,EFPageDown,EFLineBeg,EFLineEnd #text.move_display(appuifw2.EFLineBeg) appuifw2.app.screen="normal" text.add(u"\nabcabcabc\nabcabcabc") #print "coordinate=",text.pos2xy(5) #print "pos=",text.xy2pos((40,30)) text.select_all() #选取所有 text.clear_selection() #取消选取 #text.clear_undo() #取消重做 #print "Can undo=",text.can_undo() #可否重做 #print "Can cut=",text.can_cut() #可否剪切 #print "Can copy=",text.can_copy() #可否复制 #print "Can paste=",text.can_paste()

#可否粘贴 text.set_selection(0,5) text.cut() text.undo() #重做剪切/粘贴 text.set_selection(6,18) e32.ao_sleep(1) text.copy() #复制所选 text.set_pos(len(text)) e32.ao_sleep(0.5) #print "has_changed=",text.has_changed text.paste() #text.read_only=1 #禁止输入,非自带输入法引起崩溃 text.screen='normal' def quit(): app_lock.signal() #text.add(appuifw2.query(u"","text")) appuifw2.app.exit_key_handler=quit app_lock=e32.Ao_lock() app_lock.wait()

scrollpage-列表翻页查找
--------------------------示例: import appuifw,e32,scrollpage Txtlist=[u?1?,u?2?,u?3?,u?4?,u?5?,u?6?,u?7?,u?8?,u?9?,u?0?,u?a?,u?b?,u?c?,u? d?,u?e?,u?f?,u?g?,u?h?,u?i?,u?j?,u?k?,u?l?,u?m?,u?n?,u?o?,u?p?,u?q?,u?r?,u?t?, u?u?,u?v?,u?w?,u?x?,u?y?,u?z?]#定义列表 appuifw.app.body = wap = appuifw.Listbox(Txtlist)#列表界面 Scroll=scrollpage.scroll(wap,Txtlist)#定义翻页涵数 wap.bind(35, Scroll.down)##键上翻页 wap.bind(42, Scroll.up)#*键下翻页 wap.bind(50, Scroll.goto)#顶部与低部(2 健) wap.bind(48, Scroll.Search)#定义 0 键为搜索 wap.bind(53, lambda :Scroll.Search(Scroll.sr))#定义 5 键查找下一个 lock = e32.Ao_lock() appuifw.app.exit_key_handler = lock.signal if appuifw.app.full_name().find(?Ped?)>0:lock.wait()

logs 模块的用法, 得到短信 和通话等记录
logs 模块可以获取手机短信,email ,通话记录等信息的日志。 dir 的信息很多,就不列举了。主要说下用法吧。

以短信和通话记录为例。 短信: import logs import time #mode 为类型,in 为接收,out 为发送 l =logs.sms(mode=?out?) for i in l : #时间 t=time.localtime(i[?time?]) smstime=str(t[0])+(?/?)+str(t[1])+(?/?)+str(t[2])+(?/?)+str(t[3])+(?:?)+str(t[ 4])+(?:?)+str(t[5]) print smstime #号码 print i[?number?] #内容 print i[?subject?] 其中还可以得到很多信息,如下: {?status?: u?Sent?, ?direction?: u?Outgoing?, ?description?: u?Short message?, ?duration type?: -1, ?number?: u?+8613634331557?,?contact?: -1, ?flags?: 2, ?time?: 1235075058.42975, ?duration?: 0, ?link?: 0, ?subject?: u?\u6ca1\u4e8b\u554a\uff0c\u6211\u548c\u4ed6\u8bf4\u70e6\uff0c\u5f9 7\u505a\u505a\u6837\u5b50\u554a?, ?data?: ?\x02\x00\x00\x00\x01\x00\x 00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 0?, ?id?: 8787, ?name?: u??} 具体都是什么,大家摸索着来。 值得一提的是, 当参数为 out 时, 获得的发出信息会比信息已发信息中 多的多,这说明系统还是在暗暗记录着你的操作的。 通过这个,我们可以看出,不使用 inbox 模块,也可以读取信息的。 通话记录: import logs import time

#mode 有 in 来电,out 去电,missed 未接 l =logs.calls(mode=?out?) for i in l : #时间 t=time.localtime(i[?time?]) calltime=str(t[0])+(?/?)+str(t[1])+(?/?)+str(t[2])+(?/?)+str(t[3])+(?:?)+str(t[ 4])+(?:?)+str(t[5]) print call time #号码 print i[?number?] 其他数据如下,具体含义自测: {?status?: u??, ?direction?: u?Outgoing?, ?description?: u?Voice call?, ?duration type?: 1, ?number?: u?+8615843040739?, ?contact?: -1, ?flags?: 0, ?time?: 1234937006.86562, ?duration?: 0, ?link?: 0, ?subject?: u?0?, ?data?: ??, ?id?: 8737, ?name?: u??} 通过上面的代码,我们就可以用 python 来读取通话记录了。 logs 模块的其他东西,用法基本和上面两个都是一样的,大家可以自己 动手写一写。 这个模块是在做自由备份时学习的,以下摘自诺基亚论坛,本人只是简 单翻译说明: How to use logs 如何使用 logs 模块 This article describes how to read the phone?s logs usingPys60. 这篇文章描述 pys60 如何读取手机日志。 Example 1: Show the latest missed call?s number. 例 1:显示最后一个未接来电号码 import logs l=logs.calls(mode=?missed?)[0] #The dictionary for the latest missed call #返回最后未接电话的字典 #Other tags are ?in? for received and ?out? for dialed

#其他的索引?in?代表来电?out ?代表拨出电话 print l[“number“] #Displays the value for the entry “number“ #显示电话号码 Example 2: Show a list of all the numbers from which SMS have been received. 例 2:显示所有收到短信的号码 import logs l=logs.sms(mode=?in?) fori inrange(len(l)): printl[“number“] #这个复杂点,不弄了,大家自己看吧 Example 3: Show a list of the durations of all dialed calls along with their dates from __future__ import division import logs l=logs.calls(mode=’out’) durations=[] times=[] fori inrange(len(l)): durations.append(l[“duration“]) times.append(l[“time“]) #The times we added to the list are Unix timestamps, meaning seconds since 1970 00:00:00,

这个时间我们添加的是自 1970 00:00:00 相差的秒

codecs 模块
来源:?流星?
python 对多国语言的处理是支持的很好的,它可以处理现在任意编码

的字符, 这里深入的研究一下 python 对多种不同语言的处理,有一点需 要清楚的是,当 python 要做编码转换的时候,会借助于内部的编码, 转换过程是这样的:原有编码 ->内部编码 ->目的编码,python 的内部 是使用 unicode 来处理的, 但是 unicode 的使用需要考虑的是它的编码 格式有两种,一是 UCS-2,它一共有 65536 个码位,另一种是 UCS-4, 它有 2147483648g 个码位。对于这两种格式,python 都是支持的,这 个是在编译时通过--enable- unicode=ucs2 或--enable-unicode=ucs4 来指定的。那么我们自己默认安装的 python 有的什么编码怎么来确定 呢?有一个办法,就是通过 sys.maxunicode 的值来判断: import sys print sys.maxunicode,如果输出的值为 65535,那么就是 UCS-2,如果输 出是 1114111 就是 UCS-4 编码。我们要认识到一点:当一个字符串转换 为内部编码后,它就不是 str 类型了!它是 unicode 类型:a="风卷残 云" print type(a) b= a.unicode(a,"gb2312") print type(b)输出:<type 'str'><type 'unicode'>这个时候 b 可以 方便的任意转换为其他编码,比如转换为 utf-8:c = b.encode("utf-8") print c,c 输出的东西看起来是乱码,那就对了,因为是 utf-8 的字符 串。好了,该说说 codecs 模块了,它和我上面说的概念是密切相关的。 codecs 专门用作编码转换,当然,其实通过它的接口是可以扩展到其 他关于代码方面的转换的,这个东西这里不涉及。

#-*- encoding: gb2312 -*import codecs, sys print '-'*60 # 创建 gb2312 编码器 look = codecs.lookup("gb2312") # 创建 utf-8 编码器 look2 = codecs.lookup("utf-8") a ="我爱北京天安门" print len(a), a # 把 a 编码为内部的 unicode, 但为什么方法名为 decode 呢,我的理 解是把 gb2312 的字符串解码为 unicode b = look.decode(a) # 返回的 b[0]是数据,b[1]是长度,这个时候的类型是 unicode 了 print b[1], b[0], type(b[0])# 把内部编码的 unicode 转换为 gb2312 编码的字符串,encode 方法会返回一个字符串类型 b2 = look.encode(b[0]) # 发现不一样的地方了吧?转换回来之后,字符串长度由 14 变为了 7! 现在的返回的长度才是真正的字数,原来的是字节数 print b2[1], b2[0], type(b2[0]) # 虽然上面返回了字数, 但并不意味着用 len 求 b2[0]的长度就是 7 了, 仍然还是 14,仅仅是 codecs.encode 会统计字数 print len(b2[0]),

上面的代码就是 codecs 的使用,是最常见的用法。另外还有一个问题 就是, 如果我们处理的文件里的字符编码是其他类型的呢?这个读取进 行做处理也需要特殊的处理的。codecs 也提供了方法. #-*- encoding:gb2312 -*import codecs, sys # 用 codecs 提供的 open 方法来指定打开的文件的语言编码, 它会在读 取的时候自动转换为内部 unicode bfile = codecs.open("dddd.txt", 'r',"big5") #bfile = open("dddd.txt", 'r') ss = bfile.read() bfile.close() # 输出, 这个时候看到的就是转换后的结果。 如果使用语言内建的 open 函数来打开文件,这里看到的必定是乱码 print ss, type(ss) 上面这个处理 big5 的,可以去找段 big5 编码的文件试试

struct 模块
在数据格式转换方面,struct 模块可以满足大部分需求 主要有下面 4 个方法: struct.pack

struct.unpack struct.pack_into struct.unpack_from struct.calcsize

简单记录下
struct.pack(fmt, v1, v2, ...) 用于将 Python 的值根据格式符,转换为字符串 参数 fmt 是格式字符串 v1, v2, ...表示要转换的 python 值

例子程序代码
import struct a = 20 b = 400 str = struct.pack("ii", a, b) print 'length:', len(str)

print str print repr(str)

#---- result #length: 8 # ----这里是乱码

#'\x14\x00\x00\x00\x90\x01\x00\x00'

struct.unpack(fmt, string) 刚好与 struct.pack 相反,用于将字节流转换成 python 数据类型 注意!返回一个远组

例子程序代码
str = struct.pack("ii", 20, 400) a1, a2 = struct.unpack("ii", str) print 'a1:', a1 print 'a2:', a2 #---- result: #a1: 20 #a2: 400

struct.pack_into, struct.unpack_from

其实是实现了独个单位的转换 程序代码 import struct from ctypes import create_string_buffer

buf = create_string_buffer(12) print repr(buf.raw)

struct.pack_into("iii", buf, 0, 1, 2, -1) print repr(buf.raw)

print struct.unpack_from('iii', buf, 0) #我试过用 0) #居然也能正常使用,很奇怪 #可能就是 raw 和 buf 其实都是继承了列表 print struct.unpack_from('iii', buf.raw,

#---- result #'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' #'\x01\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff' #(1, 2, -1)

而 struct.calcsize 用于计算格式字符串所对应的结果的长度 如:struct.calcsize('ii'),返回 8。 因为两个 int 类型所占用的长度是 8 个字节。
格式 C 语言类型 符 x c b B ? h H i I l L q Q f d s p p pad byte char signed char

Python 类型 no value string of length 1 integer

unsigned char integer _Bool short bool integer

unsigned short integer int unsigned int long integer integer or long integer

unsigned long long long long long

unsigned long long long float double char[] char[] void * float float string string long

random 模块
random.random random.random()用于生成一个 0 到 1 的随机符点数: 0 <= n < 1.0

random.uniform random.uniform 的函数原型为:random.uniform(a, b),用于生 成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下 限。如果 a > b,则生成的随机数 n: a <= n <= b。如果 a <b, 则 b <= n <= a。 print random.uniform(10, 20) print random.uniform(20, 10) #---- 结果(不同机器上的结果不一样) #18.7356606526 #12.5798298022

random.randint random.randint()的函数原型为:random.randint(a, b),用于生 成一个指定范围内的整数。其中参数 a 是下限,参数 b 是上限,生成的 随机数 n: a <= n <= b print random.randint(12, 20) print random.randint(20, 20) #生成的随机数 n: 12 <= n <= 20 #结果永远是 20

#print random.randint(20, 10) 限。 random.randrange

#该语句是错误的。下限必须小于上

random.randrange 的函数原型为:random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随 机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。 random.choice random.choice 从 序 列 中 获 取 一 个 随 机 元 素 。 其 函 数 原 型 为 : random.choice(sequence)。 参数 sequence 表示一个有序类型。 这里要 说明 一下:sequence 在 python 不是一种特定的类型,而是泛指一系 列的类型。list, tuple, 字符串都属于 sequence。有关 sequence 可 以查看 python 手册数据模型这一章 下面是使用 choice 的一些例子: print random.choice("学习 Python") print random.choice(["JGood", "is", "a", "handsome", "boy"]) print random.choice(("Tuple", "List", "Dict")) random.shuffle random.shuffle 的函数原型为:random.shuffle(x[, random]),用于

将一个列表中的元素打乱。如: p = ["Python", "is", "powerful", "simple", "and so on..."] random.shuffle(p) print p #---- 结果(不同机器上的结果可能不一样。) #['powerful', 'simple', 'is', 'Python', 'and so on...']

random.sample random.sample 的函数原型为:random.sample(sequence, k),从指定 序列中随机获取指定长度的片断。sample 函数不会修改原有序列。

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice = random.sample(list, 5) 为一个片断返回 print slice print list #原有序列并没有改变。 #从 list 中随机获取 5 个元素,作

Form e32dbm 的运用 #飞影 7610

def ru(x):return x.decode('utf-8')

import appuifw import e32dbm list0 = (ru('文本一'), 'text', ru('一')) list1 = (ru('文本二'), 'text', ru('二')) list2 = (ru('文本三'), 'text', ru('三'))

list = [list0, list1, list2] my = appuifw.Form(list,

appuifw.FFormEditModeOnly|appuifw.FFormDouble Spaced) my.execute()

f = e32dbm.open(u'D:\\dat', 'n') f['list0'] = (my[0][2].encode('utf8')) f['list1'] = (my[1][2].encode('utf8')) f['list2'] = (my[2][2].encode('utf8')) f.close() appuifw.note(u'ok !') f.close()

f = e32dbm.open(u'D:\\dat', 'c') appuifw.note(f['list0'].decode('utf8'))

f.close()

调用系统进度条 #作者:彩宇星炫 本人在此祝大家端午节快乐,

import appuifw,e32,audio,dialog #引入相关模块 def cn(x):return x.decode("utf8") #定义编码转换函数 appuifw.app.body=t=appuifw.Text() #定义文本界面 t.focus=False appuifw.app.screen="full" #使光标从屏幕上消失,并限制输入数字以外的字符 n=appuifw.query(cn("请输入要用语音祝福乐网成员 \n 端午节快乐的次数:"),"number") #把用户输入的数字(常量)赋值给变量“n”

wait=dialog.Wait(cn("请稍后…"))#调用系统进度条, 并设置初现字幕 wait.show()#显示进度条

i=0 #赋值 while i<n: #循环 e32.ao_sleep(0.2)#延时 0.2 秒 wait.set_label(cn("正在祝福…"))#更改进度条显示的 字 audio.say(cn("祝乐网成员端午节快乐"))#用语音说出 这出这段祝福 i+=1#赋值 t.set(cn("第")+unicode(i)+cn("次祝福"))#在屏幕上显 示祝福了的次数 wait.set_label(cn("第")+unicode(i)+cn("次祝福"))#在 进度条中显示祝福了的次数 t.add(cn("\n 玩 py 来:PY 开发技术交流区")) e32.ao_sleep(0.3)#延时 if(i==n): appuifw.note(cn("祝福完毕"),"conf")#提示完成了祝 福

wait.close()#关闭进度条

marshal 模块用法 该模块有 2 个比较常用的函数 dump()写入数据一次一条 load()读取数据一次一条,在同个文件里这个条是和上 面对应的 示例如下: >>> import marshal >>> f=open("e:\\set.bin","wb")#把数据写入这个文件 里 >>> marshal.dump("my",f) >>> marshal.dump("you",f) >>> marshal.dump("he",f) >>> f.close() >>> f=open("e:\\set.bin","rb") >>> marshal.load(f) ?my? >>> marshal.load(f) ?you?

>>> marshal.load(f) ?he? >>> f.close()


相关文章:
PYthon模块使用教程.pdf
PYthon模块使用教程_计算机软件及应用_IT/计算机_专业资料。PYthon模块使用教程add 模块 进度条模块 os 模块 contacts 模块 zlib 模块 fy_marage 模块 e32 模块 sys...
python模块下载及安装方法.doc
python 开发_常用的 python 模块及安装方法 adodb:我们领导推
python中导入模块的方法.doc
python中导入模块方法_互联网_IT/计算机_专业资料。python学习,模块导入 python 有三种导入模块方法 1.引用 importmodname 模块是指一个可以交互使用,或者从另...
Python程序开发教程_图文.ppt
Python程序开发教程 - Python程序开发教程,包括作用、发展历史、编程技巧等... Python程序开发教程_计算机软件及应用_IT/...然后用Python调用相应的模块。 ? C/C++: ...
PYTHON OS模块使用方法.pdf
PYTHON OS模块使用方法 - python os 模块 Python 的标
Python快速入门教程.pdf
Python快速入门教程_互联网_IT/计算机_专业资料。Python快速入门教程,Python快速...(ActivePython 是对 Python 核心和常用模块的二进制包装,它是 ActiveState 公司...
python_os模块使用方法.doc
python_os模块使用方法 - python os 模块 Python 的标
Python自定义包使用方法.pdf
Python 自定义包使用方法 1.介绍 python 中的 Module 是比较重要的概念,每个 ...fun.py 的路径到模块调用的搜索路径下, 那就等同于与其在同一目录下的使用。...
python简明教程中文_图文.pdf
Python标准库 简介 sys模块 命令行参数 更多sys的内容 os模块 概括 15. 更多Python的内容 特殊的方法 单语句块 列表综合 使用列表综合 在函数中接收元组和列表 ...
Python自定义包使用方法.doc
Python 自定义包使用方法 1.介绍 python 中的 Module 是比较重要的概念,每个 ...(通过 os.sys.path 查看) 2)在需要被调用的模块的所在层级目录中均增加__...
Python大学教程 第六章_图文.ppt
Python大学教程 第六章 - 本书介绍了使用Python语言进行程序设计的方法及其应用。全书共14章,分为三部分。第一部分为基础篇,主要介绍Python的基础语法。第二部分为...
python笔记 心得.pdf
python笔记 心得 - python 有三种导入模块方法 其一, import modname : 模块是指一个可以交互使用,或者从另一 Python 程序访问的代码段。 只要导入了一个...
Python程序设计案例课堂第二篇核心技术第八章Python内....pdf
Python程序设计案例课堂第二篇核心技术第八章Python内部的秘密模块与类库 - 第8章 Python 内部的 秘密 模块与类库 在前面的几个章节中,一直使用 Python ...
python-xlwt模块详解.doc
python-xlwt模块详解_计算机软件及应用_IT/计算机_专业资料。python 模块介绍- ...('format.xls') 超级链接的插入方法: fromxlwt import * f= Font() f....
简明Python教程_图文.pdf
简明Python教程 - 目 介绍 献词 前言 译者前言 关于 Python 安装 第一步 基础 运算符与表达式 控制流 函数 模块 数据结构 解决问题 面向对象编程 输入与输出 ...
python免费视频教程(初高中级)+基础教程_图文.doc
零基础入门学习视频教程 玩转 Python 编程语言视频教程Python Django 快速...90 【Python 第 38 课】模块 ......
python机器学习教程推荐下载?.pdf
千锋教育 www.qfedu.com 精品课程 全程面授 python 机器学习教程推荐下载? 在 Python 中有很多机器学习的模块,比如 Sklearn、Tensorflow、Caffe 等,可以很方便地...
python基础教程至60课_基础_图文.pdf
python 模块的常用安装方式 ......如何使用教程...139 正则表
Python程序设计教程第5章_图文.ppt
Python程序设计教程第5章 - 第5章 Python模块 课程描述 模块是Python语言的一个 重要概念,它可以将函数 按功能划分到一起,以便 日后使用或共享给他人。 可以使用...
Python操作Mysql实例教程手册(带书签).pdf
Python操作Mysql实例教程手册(带书签)_计算机软件及应用_IT/计算机_专业资料。...实例 1、取得 MYSQL 的版本在 windows 环境下安装 mysql 模块用于 python 开发...
更多相关文章: