﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Skynet-随笔分类-python</title><link>http://www.blogjava.net/Skynet/category/35329.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 21 Dec 2009 16:07:04 GMT</lastBuildDate><pubDate>Mon, 21 Dec 2009 16:07:04 GMT</pubDate><ttl>60</ttl><item><title>MoinMoin wiki 服务器搭建 与尝试</title><link>http://www.blogjava.net/Skynet/archive/2009/12/20/306749.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Sun, 20 Dec 2009 15:34:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/12/20/306749.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/306749.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/12/20/306749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/306749.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/306749.html</trackback:ping><description><![CDATA[python easy_install moin 或 下载 moin-1.9.0 编译<br />
设置 path 中有 moin.py <br />
#我这 参考<br />
path = $PATH:/Python25/moin-1.9.0/MoinMoin/script<br />
<br />
# wikiconfig.py 下面我点下 参数 ，大家看代码 就知道了<br />
vi&nbsp; /Python25/moin-1.9.0/wiki/config/<strong>wikiconfig.py</strong><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">instance_dir&nbsp;=&nbsp;'/where/ever/your/instance/is'</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">instance_dir&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;wikiconfig_dir</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">/../</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;Where&nbsp;your&nbsp;own&nbsp;wiki&nbsp;pages&nbsp;are&nbsp;(make&nbsp;regular&nbsp;backups&nbsp;of&nbsp;this&nbsp;directory):</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">data_dir&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;os.path.join(instance_dir,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">data-1</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">''</span><span style="color: #000000;">)&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;path&nbsp;with&nbsp;trailing&nbsp;/</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
<br />
navi_bar&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;If&nbsp;you&nbsp;want&nbsp;to&nbsp;show&nbsp;your&nbsp;page_front_page&nbsp;here:</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">u'%(page_front_page)s',</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u</span><span style="color: #800000;">'</span><span style="color: #800000;">标题</span><span style="color: #800000;">'</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u</span><span style="color: #800000;">'</span><span style="color: #800000;">FindPage</span><span style="color: #800000;">'</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u</span><span style="color: #800000;">'</span><span style="color: #800000;">HelpContents</span><span style="color: #800000;">'</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;]<br />
<br />
language_default&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">zh</span><span style="color: #800000;">'</span></div>
<br />
在修改linux 时不起作用 ：<br />
修改/root/tools/moin-1.9.0/MoinMoin/script/server/standalone.py 全局先<br />
<br />
<br />
运行：<br />
<strong>$&gt;moin&nbsp; </strong>server standalone --config-dir=/root/wiki/mywiki/config/ --hostname=192.168.102.207 --port=18081<br />
命令是可调参数：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">/root/tools/moin-1.9.0/MoinMoin/script/server/standalone.py</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;PluginScript(MoinScript):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__init__</span><span style="color: #000000;">(self,&nbsp;argv,&nbsp;def_values):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MoinScript.</span><span style="color: #800080;">__init__</span><span style="color: #000000;">(self,&nbsp;argv,&nbsp;def_values)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--docs</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">docs</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Set&nbsp;the&nbsp;documents&nbsp;directory.&nbsp;Default:&nbsp;use&nbsp;builtin&nbsp;MoinMoin/web/static/htdocs</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--user</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">user</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Set&nbsp;the&nbsp;user&nbsp;to&nbsp;change&nbsp;to.&nbsp;UNIX&nbsp;only.&nbsp;Default:&nbsp;Don't&nbsp;change</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--group</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">group</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Set&nbsp;the&nbsp;group&nbsp;to&nbsp;change&nbsp;to.&nbsp;UNIX&nbsp;only.&nbsp;Default:&nbsp;Don't&nbsp;change</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--port</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">port</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">int</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Set&nbsp;the&nbsp;port&nbsp;to&nbsp;listen&nbsp;on.&nbsp;Default:&nbsp;8080</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--hostname</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--interface</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">hostname</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Set&nbsp;the&nbsp;ip/hostname&nbsp;to&nbsp;listen&nbsp;on.&nbsp;Use&nbsp;\</span><span style="color: #800000;">"</span><span style="color: #000000;">\</span><span style="color: #800000;">"</span><span style="color: #800000;">&nbsp;for&nbsp;all&nbsp;interfaces.&nbsp;Default:&nbsp;localhost</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--start</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">start</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;action</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">store_true</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Start&nbsp;server&nbsp;in&nbsp;background.</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--stop</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">stop</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;action</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">store_true</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Stop&nbsp;server&nbsp;in&nbsp;background.</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--pidfile</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">pidfile</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Set&nbsp;file&nbsp;to&nbsp;store&nbsp;pid&nbsp;of&nbsp;moin&nbsp;daemon&nbsp;in.&nbsp;Default:&nbsp;moin.pid</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parser.add_option(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">--debug</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;dest</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">debug</span><span style="color: #800000;">"</span><span style="color: #000000;">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Debug&nbsp;mode&nbsp;of&nbsp;server.&nbsp;off:&nbsp;no&nbsp;debugging&nbsp;(default),&nbsp;web:&nbsp;for&nbsp;browser&nbsp;based&nbsp;debugging,&nbsp;external:&nbsp;for&nbsp;using&nbsp;an&nbsp;external&nbsp;debugger.</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
</span></div>
<br />
<br />
#成功运行 后<br />
2009-12-20 23:31:31,796 WARNING MoinMoin.log:139 using logging configuration read from built-in fallback in MoinMoin.log module!<br />
<br />
2009-12-20 23:31:32,515 INFO werkzeug:106&nbsp; * Running on http://192.168.1.100:8080/<br />
<br />
<br />
一些简单的语法介绍『其中 HelpOnDrawings 的功能 有&#8220;惊艳&#8221;的效果！！呵呵，自己搭建个自己的wiki 出来 看吧』<br />
<ul>
    <li><a href="http://master19.moinmo.in/HelpContents">HelpContents</a></li>
    <li><a href="http://master19.moinmo.in/HelpForBeginners">HelpForBeginners</a></li>
    <li><a href="http://master19.moinmo.in/HelpForUsers">HelpForUsers</a></li>
    <li><a href="http://master19.moinmo.in/HelpIndex">HelpIndex</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnAccessControlLists">HelpOnAccessControlLists</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnActions">HelpOnActions</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnActions/AttachFile">HelpOnActions/AttachFile</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnAdministration">HelpOnAdministration</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnAdmonitions">HelpOnAdmonitions</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnAuthentication">HelpOnAuthentication</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnAuthentication/ExternalCookie">HelpOnAuthentication/ExternalCookie</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnAutoAdmin">HelpOnAutoAdmin</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnCategories">HelpOnCategories</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnComments">HelpOnComments</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnConfiguration">HelpOnConfiguration</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnConfiguration/EmailSupport">HelpOnConfiguration/EmailSupport</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnConfiguration/Example/AideDeParam%C3%A9trage/WikiEnLangueFran%C3%A7aise">HelpOnConfiguration/Example/AideDeParam&#233;trage/WikiEnLangueFran&#231;aise</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnConfiguration/FileAttachments">HelpOnConfiguration/FileAttachments</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnConfiguration/SecurityPolicy">HelpOnConfiguration/SecurityPolicy</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnConfiguration/SupplementationPage">HelpOnConfiguration/SupplementationPage</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnConfiguration/SurgeProtection">HelpOnConfiguration/SurgeProtection</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnConfiguration/UserPreferences">HelpOnConfiguration/UserPreferences</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnCreoleSyntax">HelpOnCreoleSyntax</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnDictionaries">HelpOnDictionaries</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnDrawings">HelpOnDrawings</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnEditLocks">HelpOnEditLocks</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnEditing">HelpOnEditing</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnEditing/SubPages">HelpOnEditing/SubPages</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnFormatting">HelpOnFormatting</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnGraphicalEditor">HelpOnGraphicalEditor</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnGroups">HelpOnGroups</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnHeadlines">HelpOnHeadlines</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnImages">HelpOnImages</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnLanguages">HelpOnLanguages</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnLinking">HelpOnLinking</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnLinking/NotesLinks">HelpOnLinking/NotesLinks</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnLists">HelpOnLists</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnLogin">HelpOnLogin</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnMacros">HelpOnMacros</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnMacros/EmbedObject">HelpOnMacros/EmbedObject</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnMacros/Include">HelpOnMacros/Include</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnMacros/MailTo">HelpOnMacros/MailTo</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnMacros/MonthCalendar">HelpOnMacros/MonthCalendar</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnMoinCommand">HelpOnMoinCommand</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnMoinCommand/ExportDump">HelpOnMoinCommand/ExportDump</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnMoinWikiSyntax">HelpOnMoinWikiSyntax</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnNavigation">HelpOnNavigation</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnNotification">HelpOnNotification</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnOpenIDProvider">HelpOnOpenIDProvider</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnPackageInstaller">HelpOnPackageInstaller</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnPageCreation">HelpOnPageCreation</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnPageDeletion">HelpOnPageDeletion</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnParsers">HelpOnParsers</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnParsers/ReStructuredText">HelpOnParsers/ReStructuredText</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnParsers/ReStructuredText/RstPrimer">HelpOnParsers/ReStructuredText/RstPrimer</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnProcessingInstructions">HelpOnProcessingInstructions</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnRules">HelpOnRules</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSearching">HelpOnSearching</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSessions">HelpOnSessions</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSlideShows">HelpOnSlideShows</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSlideShows/000%20Introduction">HelpOnSlideShows/000 Introduction</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSlideShows/100%20Creating%20the%20slides">HelpOnSlideShows/100 Creating the slides</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSlideShows/900%20Last%20but%20not%20least%3A%20Running%20your%20presentation">HelpOnSlideShows/900 Last but not least: Running your presentation</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSmileys">HelpOnSmileys</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSpam">HelpOnSpam</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSpellCheck">HelpOnSpellCheck</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSubscribing">HelpOnSubscribing</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSuperUser">HelpOnSuperUser</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnSynchronisation">HelpOnSynchronisation</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnTables">HelpOnTables</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnTemplates">HelpOnTemplates</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnThemes">HelpOnThemes</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnUpdating">HelpOnUpdating</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnUpdatingPython">HelpOnUpdatingPython</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnUserHandling">HelpOnUserHandling</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnUserPreferences">HelpOnUserPreferences</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnVariables">HelpOnVariables</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnXapian">HelpOnXapian</a></li>
    <li><a href="http://master19.moinmo.in/HelpOnXmlPages">HelpOnXmlPages</a></li>
    <li><a href="http://master19.moinmo.in/HelpTemplate">HelpTemplate</a></li>
</ul>
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/306749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-12-20 23:34 <a href="http://www.blogjava.net/Skynet/archive/2009/12/20/306749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给自己的 图片处理工具 (py2exe)</title><link>http://www.blogjava.net/Skynet/archive/2009/12/07/305005.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Mon, 07 Dec 2009 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/12/07/305005.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/305005.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/12/07/305005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/305005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/305005.html</trackback:ping><description><![CDATA[<br />
<br />
工具为&nbsp; dist/myImg.exe<br />
<br />
<br />
工具使用:<br />
在 dist 中<br />
myImg.exe Ratio&nbsp; c:/需要等比压缩图片/*.jpg&nbsp; d:/等比后路径&nbsp;&nbsp; 等比款width&nbsp; 等比高height <br />
myImg.exe Watermark c:/水印图片/x.png&nbsp; c:/需要加水印图片/*.jpg&nbsp; d:/添加水印后图片&nbsp;&nbsp; 加水印width处&nbsp; 加水印height处<br />
<br />
等比压缩实例:<br />
myImg.exe Ratio &nbsp;<br />
&nbsp;&nbsp; &nbsp;"C:"Documents and Settings"lky"My Documents"My Dropbox"tools"img"src"python"dist"test"img"*.jpg" <br />
&nbsp;&nbsp; &nbsp;"C:"Documents and Settings"lky"My Documents"MyDropbox"tools"img"src"python"dist"test"toimg2" <br />
&nbsp;&nbsp; &nbsp;600 400<br />
结果在&nbsp; ../dist"test"toimg&nbsp; 目录下 生成 等比图片 testratio_600_400.jpg<br />
<br />
<br />
水印添加实例:<br />
myImg.exe Watermark <br />
&nbsp;&nbsp; &nbsp;"C:"Documents and Settings"lky"My Documents"My Dropbox"tools"img"src"python"dist"test"img"logo.png"&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;"C:"Documents and Settings"lky"My Documents"My Dropbox"tools"img"src"python"dist"test"toimg2"*.jpg" <br />
&nbsp;&nbsp; &nbsp;"C:"Documents and Settings"lky"My Documents"My Dropbox"tools"img"src"python"dist"test"toimg3" <br />
&nbsp;&nbsp; &nbsp;100 220<br />
结果在&nbsp; ../dist"test"toimg3&nbsp; 目录下 生成 等比图片 test_ratio_600_400_watermark_100_220.jpg<br />
<br />
<br />
<br />
安装 python PIL 包<br />
和安装 python py2exe <br />
<br />
工具脚本 py <br />
<br />
<br />
工具编译过程:<br />
python setup.py py2exe <br />
<br />
<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;sys<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;imgRatio(imgpath,tpath</span><span style="color: #000000;">=</span><span style="color: #800000;">'</span><span style="color: #800000;">.</span><span style="color: #800000;">'</span><span style="color: #000000;">,width</span><span style="color: #000000;">=</span><span style="color: #000000;">600</span><span style="color: #000000;">,height</span><span style="color: #000000;">=</span><span style="color: #000000;">400</span><span style="color: #000000;">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;Image,os<br />
&nbsp;&nbsp;&nbsp;&nbsp;im&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Image.open(&nbsp;imgpath&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;im.thumbnail(&nbsp;(width,height)&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;imgpath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;os.path.split(imgpath)[</span><span style="color: #000000;">1</span><span style="color: #000000;">]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;os.path.exists(tpath)&nbsp;:&nbsp;os.makedirs(tpath)<br />
&nbsp;&nbsp;&nbsp;&nbsp;im.save(&nbsp;tpath</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">imgpath.split(</span><span style="color: #800000;">'</span><span style="color: #800000;">.</span><span style="color: #800000;">'</span><span style="color: #000000;">)[0]</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">_ratio_</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">str(width)</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">_</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">str(height)</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">.jpg</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;)<br />
<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;imgWatermark(imgwate,imgpath,sw</span><span style="color: #000000;">=</span><span style="color: #000000;">100</span><span style="color: #000000;">,sh</span><span style="color: #000000;">=</span><span style="color: #000000;">50</span><span style="color: #000000;">,tpath</span><span style="color: #000000;">=</span><span style="color: #800000;">'</span><span style="color: #800000;">.</span><span style="color: #800000;">'</span><span style="color: #000000;">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;Image,os<br />
&nbsp;&nbsp;&nbsp;&nbsp;baseim&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Image.open(&nbsp;imgpath&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;floatim&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Image.open(&nbsp;imgwate&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;baseim.paste(&nbsp;floatim,&nbsp;(sw,sh&nbsp;)&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;imgpath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;os.path.split(imgpath)[</span><span style="color: #000000;">1</span><span style="color: #000000;">]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;os.path.exists(tpath)&nbsp;:&nbsp;os.makedirs(tpath)<br />
&nbsp;&nbsp;&nbsp;&nbsp;baseim.save(&nbsp;tpath</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">imgpath.split(</span><span style="color: #800000;">'</span><span style="color: #800000;">.</span><span style="color: #800000;">'</span><span style="color: #000000;">)[0]</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">_watermark_</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">str(sw)</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">_</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">str(sh)</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">.jpg</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
args&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sys.argv<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;glob,os<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;Ratio&nbsp;&nbsp;/path/*.jpg&nbsp;&nbsp;/tpath&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;height&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;args[</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">Ratio</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;img&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;glob.glob(args[</span><span style="color: #000000;">2</span><span style="color: #000000;">])&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgRatio(os.path.abspath(img),args[</span><span style="color: #000000;">3</span><span style="color: #000000;">],int(args[</span><span style="color: #000000;">4</span><span style="color: #000000;">]),int(args[</span><span style="color: #000000;">5</span><span style="color: #000000;">]))<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;Watermark&nbsp;/path/x.png&nbsp;&nbsp;/path/*.jpg&nbsp;&nbsp;/tpath&nbsp;&nbsp;&nbsp;width&nbsp;&nbsp;height&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;args[</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">Watermark</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;img&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;glob.glob(args[</span><span style="color: #000000;">3</span><span style="color: #000000;">])&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgWatermark(args[</span><span style="color: #000000;">2</span><span style="color: #000000;">],img,int(args[</span><span style="color: #000000;">5</span><span style="color: #000000;">]),int(args[</span><span style="color: #000000;">6</span><span style="color: #000000;">]),args[</span><span style="color: #000000;">4</span><span style="color: #000000;">])<br />
<br />
<br />
</span></div>
<br />
<br />
py2exe<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">!/usr/bin/python</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">&nbsp;&nbsp;py2exe&nbsp;file</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">&nbsp;1.install&nbsp;py2exe&nbsp;application</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">&nbsp;2.python&nbsp;setup.py&nbsp;py2exe</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;distutils.core&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;setup<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;py2exe<br />
setup(console</span><span style="color: #000000;">=</span><span style="color: #000000;">[</span><span style="color: #800000;">'</span><span style="color: #800000;">myImg.py</span><span style="color: #800000;">'</span><span style="color: #000000;">])<br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/305005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-12-07 15:12 <a href="http://www.blogjava.net/Skynet/archive/2009/12/07/305005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟我一起学 - 算法导论 - 快速排序</title><link>http://www.blogjava.net/Skynet/archive/2009/12/03/304668.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Thu, 03 Dec 2009 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/12/03/304668.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/304668.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/12/03/304668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/304668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/304668.html</trackback:ping><description><![CDATA[<br />
# 快排 和 分治 很像 都是<strong>分而治之</strong> ，但他们却是 相反的 方式排序 ：<br />
分治 是想拆分完成后，合并以有序的小段进行 <strong>排序</strong> ，而快排是直接由原始的&#8220;拆分&#8221;来<strong>排序</strong> 。<br />
<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">encoding=utf-8</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">从&nbsp;大&nbsp;到&nbsp;小</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;partition(A,p,r):<br />
&nbsp;&nbsp;&nbsp;&nbsp;tmp</span><span style="color: #000000;">=</span><span style="color: #000000;">A[p]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;True&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">r&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;A[p]&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;tmp&nbsp;:&nbsp;p</span><span style="color: #000000;">+=</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;r</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">p&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;A[r]&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;tmp&nbsp;:&nbsp;r</span><span style="color: #000000;">-=</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;A[p]</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">A[r]:&nbsp;A[p],A[r]</span><span style="color: #000000;">=</span><span style="color: #000000;">A[r],A[p]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;r</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">p&nbsp;:&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;p<br />
<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;quickSort(A,p,r):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">r:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q</span><span style="color: #000000;">=</span><span style="color: #000000;">partition(A,p,r)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quickSort(A,p,q)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quickSort(A,q</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,r)<br />
<br />
A</span><span style="color: #000000;">=</span><span style="color: #000000;">[</span><span style="color: #000000;">9</span><span style="color: #000000;">,</span><span style="color: #000000;">61</span><span style="color: #000000;">,</span><span style="color: #000000;">7</span><span style="color: #000000;">,</span><span style="color: #000000;">14</span><span style="color: #000000;">,</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">7</span><span style="color: #000000;">,</span><span style="color: #000000;">667</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #000000;">8</span><span style="color: #000000;">]<br />
</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;A<br />
quickSort(A,0,len(A)</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;A<br />
<strong># 结果 </strong></span><strong>[667, 61, 14, 9, 8, 7, 7, 6, 3, -1]</strong></div>
<br />
<br />
<br />
图解：<br />
一次迭代过程描述 （从小到大）：<br />
1. 以 A[0] 为切分点 用临时变量 记录 这里是 <strong>切分点</strong> = [5] <br />
2. 分别起 2枚指针 [切分起左,右]<br />
3. 分别向中间 靠拢 ， 当左指针指向值大于 切分点 停止 左 ， 右指针指向值 小于 切分点 停止 右 。<br />
4. 判断 是否是&nbsp; 停止点 上 左值 小于 右值 是：交换两指针值 ！ <br />
<img src="http://www.blogjava.net/images/blogjava_net/skynet/42926/qs.jpg" alt="" border="0" /><br />
<strong>第一次迭代后 :&nbsp; <br />
&nbsp; 以初始分隔 [5]&nbsp; 就已经切分好了 小于 5 的左 ，大于等于5 的右</strong><br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/304668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-12-03 17:11 <a href="http://www.blogjava.net/Skynet/archive/2009/12/03/304668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python pil 使用(转)</title><link>http://www.blogjava.net/Skynet/archive/2009/11/28/303986.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Fri, 27 Nov 2009 16:10:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/11/28/303986.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/303986.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/11/28/303986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/303986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/303986.html</trackback:ping><description><![CDATA[<br />
<br />
http://www.cnpython.org/docs/100/p_19.html<br />
<br />
<br />
<table align="center" border="0" cellpadding="0" cellspacing="0" width="970">
    <tbody>
        <tr>
            <td valign="top">
            <table border="0" cellpadding="0" cellspacing="0" width="100%">
                <tbody>
                    <tr>
                        <td colspan="2" class="text">
                        <div id="articleBody">
                        <div>
                        <h1><a id="id2" href="http://tech.seety.org/python/python_imaging.html#id1" name="id2">1&nbsp;&nbsp;&nbsp;影像與圖形資料的處理</a></h1>
                        <p>上一回我們談過了圖形介面程式的撰寫，這一次我們要討論圖形 (影像) 本身的處理，而討論的內容將會集中在 Python Imaging Library   (PIL) 這一套程式庫上。</p>
                        <p>PIL
                        是 Python 下最有名的影像處理套件，由許多不同的模組所組成，並且提供了許多的處理功能，允許我們在簡單的 Python
                        程式裡進行影像的處理。使用像 PIL 許樣的程式庫套件可以幫助我們把精力集中在影像處理的工作本身，避免迷失在底層的演算法裡面。</p>
                        <p>由於影像處理牽涉到了大量的數學運算，因此 PIL 中有許多的模組是用 C   語言所寫成的，以提昇處理的效率。不過，在使用的時候，我們當然不必在意這樣的問題，只管放心地用就是了。</p>
                        <div>
                        <h2><a id="pil" href="http://tech.seety.org/python/python_imaging.html#id1" name="pil">1.1&nbsp;&nbsp;&nbsp;PIL 能為你作的事</a></h2>
                        <p>PIL 具備 (但不限於) 以下的能力：</p>
                        <ul>
                            <li>數
                            十種圖檔格式的讀寫能力。常見的 JPEG, PNG, BMP, GIF, TIFF 等格式，都在 PIL 的支援之列。另外，PIL
                            也支援黑白、灰階、自訂調色盤、RGB true color、帶有透明屬性的 RBG true color、CMYK
                            及其它數種的影像模式。相當齊全。 </li>
                            <li>基本的影像資料操作：裁切、平移、旋轉、改變尺寸、調置 (transpose)、剪下與貼上等等。 </li>
                            <li>強化圖形：亮度、色調、對比、銳利度。 </li>
                            <li>色彩處理。 </li>
                            <li>PIL 提供十數種濾鏡 (filter)。當然，這個數目遠遠不能與 Photoshop&#174; 或 GIMP&#174; 這樣的專業特效處理軟體相比；但 PIL   提供的這些濾鏡可以用在 Python 程式裡面，提供批次化處理的能力。 </li>
                            <li>PIL 可以在影像中繪圖製點、線、面、幾何形狀、填滿、文字等等。 </li>
                        </ul>
                        <p>接下來，我們開始一步一步地對 Python/PIL 的影像處理程式設計進行討論。</p>
                        </div>
                        </div>
                        <div>
                        <h1><a id="id3" href="http://tech.seety.org/python/python_imaging.html#id1" name="id3">2&nbsp;&nbsp;&nbsp;轉換圖檔格式</a></h1>
                        <p>市面上有許多影像處理程式，一般人最常用它們來處理的工作大概就是圖檔格式轉換了；這是影像處理軟體最基本的功能，PIL 當然也要支援。</p>
                        <p>假設我們有一個 JPG 檔案，名字叫作 sample01.jpg，那麼，以下的程式會把這個檔案載入 Python：</p>
                        <pre>&gt;&gt;&gt; import Image<br />
                        <br />
                        &gt;&gt;&gt; im = Image.open( "sample01.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>im 這個物件是由 Image.open() 方法所產生出來的 Image 物件。我們可以用 Image   物件內的屬性來查詢關於此檔案的資訊：</p>
                        <pre>&gt;&gt;&gt; print im.format, im.size, im.mode<br />
                        <br />
                        JPEG (2288, 1712) RGB<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>格
                        式字串放在 format 屬性裡，尺寸放在 size 屬性裡，而 (調色盤) 模式放在 mode
                        屬性裡。從以上的執行結果，可以看出來我們讀的確實是一個 JPEG 檔案，檔案的尺寸是 2288 像素寬、1712 像素高，調色盤是 RGB
                        全彩模式。</p>
                        <p>既然我們已經把圖檔讀入了 Python，要處理它就簡單了。利用 Image 類別的 save() 方法，可以把檔案儲存成 PIL 支援的格式：</p>
                        <pre>&gt;&gt;&gt; im.save( "fileout.png" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>如果圖檔很大，這會花上一點時間。Image.save() 方法會根據欲存檔的副檔名，自動判斷要存圖檔的格式 (剛剛我們用的 open() 函式也會這樣作)。</p>
                        <p>save()   可以指定存檔格式。在以下的例子裡，我們把存檔格式指定為 JPEG：</p>
                        <pre>&gt;&gt;&gt; im.save( "fileout.png", "JPEG" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>這時候副檔名是無所謂的。</p>
                        <p>只處理一兩個檔案的時候，使用 Python 直譯器就相當合適。然而若要處理一大群檔案，譬如把一整個目錄的 JPEG 檔轉換為 PNG   檔，那麼寫成一個程式檔會比較方便，例如：</p>
                        <pre>#!/usr/bin/env python<br />
                        <br />
                        <br />
                        <br />
                        from glob import glob<br />
                        <br />
                        from os.path import splitext<br />
                        <br />
                        import Image<br />
                        <br />
                        <br />
                        <br />
                        jpglist = glob( "python_imaging_pix/*.[jJ][pP][gG]" )<br />
                        <br />
                        <br />
                        <br />
                        for jpg in jpglist:<br />
                        <br />
                        im = Image.open(jpg)<br />
                        <br />
                        png = splitext(jpg)[0]+".png"<br />
                        <br />
                        im.save(png)<br />
                        <br />
                        print png<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>只要在一個放了 *.jpg 或 *.JPG   檔案的目錄裡面執行這個指令稿，它就會把所有的 JPEG 檔轉成 PNG 檔案：</p>
                        <pre>$ ./convertdir.py<br />
                        <br />
                        file0001.png<br />
                        <br />
                        file0002.png<br />
                        <br />
                        .<br />
                        <br />
                        .<br />
                        <br />
                        file9999.png<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>既然 PIL 會從檔名偵測常用的檔案格式，存檔時我們通常都不會指定存檔格式。</p>
                        <p>然
                        而，依據檔案格式的不同，save() 方法提供了不同的選項參數。以 JPEG 而言，它可以接受 quality (從 1 到 100
                        的整數，預設為 75)、optimize (真假值) 及 progression (真假值)。在以下的例子裡，我們以 100 的
                        quality 來儲存 JPEG 檔案：</p>
                        <pre>&gt;&gt;&gt; im.save( "quality100.jpg", quality=100 )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <div>
                        <p>要訣</p>
                        <p>PIL 也支援 EPS (Encapsulate PostScript) 格式的寫入。TeX 的使用者可以利用 PIL   來簡單地把圖檔轉成 EPS 以供 TeX compiler 使用。</p>
                        </div>
                        </div>
                        <div>
                        <h1><a id="id4" href="http://tech.seety.org/python/python_imaging.html#id1" name="id4">3&nbsp;&nbsp;&nbsp;改變影像與製作縮圖</a></h1>
                        <p>在了解了基本的圖檔轉換之後，我們來看看如何對影像進行尺寸方面的修改。PIL 對 Image 物件提供了 resize 方法，以執行影像的縮放工作。用我們的 sample01.jpg 檔案來當例子：</p>
                        <pre>&gt;&gt;&gt; im = Image.open( "sample01.jpg" )<br />
                        <br />
                        &gt;&gt;&gt; print im.size<br />
                        <br />
                        (2288, 1712)<br />
                        <br />
                        &gt;&gt;&gt; width = 400<br />
                        <br />
                        &gt;&gt;&gt; ratio = float(width)/im.size[0]<br />
                        <br />
                        &gt;&gt;&gt; height = int(im.size[1]*ratio)<br />
                        <br />
                        &gt;&gt;&gt; nim = im.resize( (width, height), Image.BILINEAR )<br />
                        <br />
                        &gt;&gt;&gt; print nim.size<br />
                        <br />
                        (400, 299)<br />
                        <br />
                        &gt;&gt;&gt; nim.save( "resized.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>然後我們就會得到比較小的 resized.jpg：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/resized.jpg" alt="python_imaging_pix/resized.jpg" height="299" width="400" /></div>
                        <p>resize()
                        這個方法會傳回一個新的 Image 物件，所以舊的 Image 不會被更動。resize()
                        接受兩個參數，第一個用來指定變更後的大小，是一個雙元素
                        tuple，分別用以指定影像的寬與高；第二個參數可以省略，是用來指定變更時使用的內插法，預設是 Image.NEAREST
                        (取最近點)，這裡我們指定為品質比較好的 Image.BILINEAR。</p>
                        <p>resize()   可以把影像放大縮小，在使用時一定要傳入寬與高。上面的程式會先限定新影像的寬，再根據舊影像的長寬比例來算出新影像的高應該是多少，最後把尺寸值傳入 resize() 去。由此可知，resize() 是允許我們不等比例縮放的：</p>
                        <pre>&gt;&gt;&gt; width = 400<br />
                        <br />
                        &gt;&gt;&gt; height = 100<br />
                        <br />
                        &gt;&gt;&gt; nim2 = im.resize( (width, height), Image.BILINEAR )<br />
                        <br />
                        &gt;&gt;&gt; nim2.save( "resize2wide.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>會得到形狀奇怪的縮圖：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/resize2wide.jpg" alt="python_imaging_pix/resize2wide.jpg" height="100" width="400" /></div>
                        <p>我們可以任意改變新影像的尺寸值。</p>
                        <p>另一個常用的操作是旋轉；rotate()   方法可以用來旋轉影像。它取兩個參數，第一個參數是一個逆時針的度數，第二個參數則也是影像處理時的內插法，可省略：</p>
                        <pre>&gt;&gt;&gt; nim3 = nim.rotate( 45, Image.BILINEAR )<br />
                        <br />
                        &gt;&gt;&gt; nim3.save( "rotated.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>rotate() 並不會改變影像的尺寸   (dimension)，所以你會看到：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/rotated.jpg" alt="python_imaging_pix/rotated.jpg" height="299" width="400" /></div>
                        <p>出現了黑邊。如果我們想要連影像尺寸一起變動，得要改用 transpose() 方法：</p>
                        <pre>&gt;&gt;&gt; nim4 = nim.transpose( Image.ROTATE_90 )<br />
                        <br />
                        &gt;&gt;&gt; nim4.save( "transposed90.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>結果是：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/transposed90.jpg" alt="python_imaging_pix/transposed90.jpg" height="400" width="299" /></div>
                        <p>transpose()
                        方法接受 Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_DOWN, ROTATE_90, ROTATE_180,
                        ROTATE_270 等五種參數；其中後三種的旋轉均為逆時針。rotate() 方法會對像素資料進行內插；而 transpose()
                        則只是轉置像素資料，所以沒有內插參數可以設定，也不會影響影像的品質。</p>
                        <p>縮放與旋轉是最常用的兩個操
                        作，而在其中，縮圖的製作可能是特別常用的；PIL 對縮圖提供了一個方便的 thumbnail() 方法。thumbnail() 會直接修改
                        Image 物件本身，所以速度能比 resize()
                        更快，也消耗更少的記憶體。它不接受指定內插法的參數，而且只能縮小影像，不能放大影像；用法是：</p>
                        <pre>&gt;&gt;&gt; im = Image.open( "sample01.jpg" )<br />
                        <br />
                        &gt;&gt;&gt; im.thumbnail( (400,100) )<br />
                        <br />
                        &gt;&gt;&gt; im.save( "thumbnail.jpg" )<br />
                        <br />
                        &gt;&gt;&gt; print im.size<br />
                        <br />
                        (133, 100)<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>thumbnail()
                        在接受尺寸參數的時候，行為與 resize() 不同；resize() 允許我們不等比例進行縮放，但 thumbnail()
                        只能進行等比例縮小，並且是以長、寬中比較小的那一個值為基準。因此，上面的程式所作出的 thumbnail.jpg 變成了 133*100
                        的小圖片：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/thumbnail.jpg" alt="python_imaging_pix/thumbnail.jpg" height="100" width="133" /></div>
                        <p>有了這些操作，我們可以很輕易地執行影像管理的任務。</p>
                        </div>
                        <div>
                        <h1><a id="id5" href="http://tech.seety.org/python/python_imaging.html#id1" name="id5">4&nbsp;&nbsp;&nbsp;修改圖形內容</a></h1>
                        <p>除了可以針對圖形的尺寸作變更之外，PIL   更提供我們變更影像內容的能力。這樣，我們就不只能對影像進行管理，而能更進一步地利用程式來把影像的內容改成我們想要的樣子。</p>
                        <p>我們從「貼圖」開始：</p>
                        <pre>&gt;&gt;&gt; baseim = Image.open( "resized.jpg" )<br />
                        <br />
                        &gt;&gt;&gt; floatim = Image.open( "thumbnail.jpg" )<br />
                        <br />
                        &gt;&gt;&gt; baseim.paste( floatim, (150, 50) )<br />
                        <br />
                        &gt;&gt;&gt; baseim.save( "pasted.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>利用 paste() 方法，把之前作的   thumbnail.jpg 貼到 resized.jpg 裡面去：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/pasted.jpg" alt="python_imaging_pix/pasted.jpg" height="299" width="400" /></div>
                        <p>此種用法的 paste()   方法要求兩個參數，第一是要貼上的 Image，第二是要貼上的位置。第二個參數有三種指定的方式：</p>
                        <ul>
                            <li>None：不指定位置與尺寸，那麼   pasted() 會假設要貼上的 Image   與被貼上的 Image 的尺寸完全相同。 </li>
                            <li>(left, upper)：雙元素 tuple。pasted() 會把要貼上的 Image 的左上角對齊在指定的位置。 </li>
                            <li>(left,
                            upper, right, lower)：四元素 tuple。paste()` 除了會把 Image
                            的左上角對齊外，也會對齊右下角。不過基本上這種寫法和上面那一種一樣，因為 paste()
                            要求要貼上的影像與這裡指定的尺寸一致，所以不可能出現不同的兩組 right, lower。 </li>
                        </ul>
                        <p>除了「貼圖」之外，我們還可以對影像的內容進行裁切：</p>
                        <pre>&gt;&gt;&gt; im = Image.open( "sample01.jpg" )<br />
                        <br />
                        &gt;&gt;&gt; nim = im.crop( (700, 300, 1500, 1300) )<br />
                        <br />
                        &gt;&gt;&gt; nim.thumbnail( (400,400) )<br />
                        <br />
                        &gt;&gt;&gt; nim.save( "croped.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>(因為裁切之後的圖形還是大了點，所以再縮圖一次) 得到的結果是：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/croped.jpg" alt="python_imaging_pix/croped.jpg" height="400" width="320" /></div>
                        <p>crop() 接受的 box   參數指定要裁切的左、上、右、下四個邊界值，形成一個矩形。</p>
                        <p>除了剪貼之外，PIL 還可以使用內建的濾鏡 (filter) 作一些特效處理。這些濾鏡都放在 ImageFilter   模組裡面，使用前要先匯入這個模組：</p>
                        <pre>&gt;&gt;&gt; import ImageFilter<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>我們用個例子，對剛剛裁切的 "No Riding" 禁止牌作 20 次 blur (糊化)，來看看 PIL 濾鏡的效果：</p>
                        <pre>&gt;&gt;&gt; im = Image.open( "croped.jpg" )<br />
                        <br />
                        &gt;&gt;&gt; nim = im<br />
                        <br />
                        &gt;&gt;&gt; for i in range(20): nim = nim.filter( ImageFilter.BLUR )<br />
                        <br />
                        ...<br />
                        <br />
                        &gt;&gt;&gt; nim.save( "blured.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>你應該看不出來它是 "No Riding" 了吧：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/blured.jpg" alt="python_imaging_pix/blured.jpg" height="400" width="320" /></div>
                        <p>使用濾鏡的基本語法是：</p>
                        <pre>newim = im.filter( ImageFilter.FILTERNAME )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>其
                        中 FILTERNAME 是 PIL 中支援的濾鏡名稱，目前有：BLUR, CONTOUR, DETAIL, EDGE_ENHANCE,
                        EDGE_ENHANCE_MORE, EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE,
                        SHARPEN，此處就不一一介紹了，但建議你可以自己來把每一個濾鏡都試試看。</p>
                        <p>利用濾鏡，我們可以對同一類的影像進行相同的特效處理。當然，影像特效需要很精細的調整，在自動化作業中通常只能達到很粗略的效果；但 PIL   既然提供了，我們的自動程序就擁有更多的工具可以使用。</p>
                        </div>
                        <div>
                        <h1><a id="id6" href="http://tech.seety.org/python/python_imaging.html#id1" name="id6">5&nbsp;&nbsp;&nbsp;用 PIL 製作新影像</a></h1>
                        <p>除了對已存在的影像進行編修之外，從零開始建立新影像也是很重要的工作。PIL 中的 ImageDraw 模組提供給我們繪製影像內容的能力。在使用 ImageDraw   之前，要先建立好空白的新影像：</p>
                        <pre>&gt;&gt;&gt; import ImageDraw<br />
                        <br />
                        &gt;&gt;&gt; im = Image.new( "RGB", (400,300) )<br />
                        <br />
                        &gt;&gt;&gt; draw = ImageDraw.Draw( im )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>最
                        後建出來的 draw 是一個 ImageDraw 物件會提供各種繪製影像的方法。針對幾何圖形，draw 物件提供 arc()
                        (弧線)、chord() (弦)、line() (線段)、ellipse() (橢圓)、point() (點)、rectangle()
                        (矩形) 與 polygon() (多邊形)。不過，我們不準備討論幾何圖形的繪製；相信這些方法的使用對一般人來說應該都很直覺才是。</p>
                        <div>
                        <p>要訣</p>
                        <p>你
                        可以在指令行輸入 pydoc ImageDraw.ImageDraw.&lt;&lt;methodname&gt;&gt; 來查詢上述方法
                        (&lt;&lt;methodname&gt;&gt;) 的說明，譬如 pydoc ImageDraw.ImageDraw.line。</p>
                        </div>
                        <p>這裡要介紹的不是幾何圖形，而是文字的繪製。我們要再介紹一個模組：ImageFont，並且以實例來說明如何用 PIL 「寫字」：</p>
                        <pre>&gt;&gt;&gt; import Image, ImageDraw, ImageFont<br />
                        <br />
                        &gt;&gt;&gt; font = ImageFont.truetype( "<br />
                        <br />
                        ... "/usr/share/fonts/truetype/freefont/FreeMono.ttf", 24 )<br />
                        <br />
                        &gt;&gt;&gt; im = Image.new( "RGB", (400,300) )<br />
                        <br />
                        &gt;&gt;&gt; draw = ImageDraw.Draw( im )<br />
                        <br />
                        &gt;&gt;&gt; draw.text( (20,20), "TEXT", font=font )<br />
                        <br />
                        &gt;&gt;&gt; im.save( "text.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>這樣就在一個黑色底圖上用白筆寫了 "TEXT" 四個大字：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/text.jpg" alt="python_imaging_pix/text.jpg" height="300" width="400" /></div>
                        <p>接
                        著一一說明剛剛作的動作。首先我們用 ImageFont 的 truetype() 函式建立了一個 TrueType 字型，大小設定為 16
                        點。truetype() 函式的第一個參數必須是字型檔的搜尋路徑，第二個參數是字型的點數。然後依序建立影像物件與 draw 物件。寫字的動作用
                        draw 物件的 text() 方法來完成，它接受兩個參數，分別是文字的左上角點、字串，另外可以用 font 選項來指定所使用的字型
                        (若不指定，便使用預設字型)。</p>
                        <p>在 1.1.4 版之前，PIL 是只能使用點陣字型的。現在
                        PIL 加入了 TrueType 向量字型的支援，對於要「寫字」的人來說實在是一大福音。對點陣字來說，想改變字型的大小得要更換字型才作得到，但
                        TrueType 就沒有這個限制。如果我們想要寫出兩串不同大小的文字，這樣作就可以了：</p>
                        <pre>&gt;&gt;&gt; largefont = ImageFont.truetype( "<br />
                        <br />
                        ... "/usr/share/fonts/truetype/freefont/FreeMono.ttf", 48 )<br />
                        <br />
                        &gt;&gt;&gt; smallfont = ImageFont.truetype( "<br />
                        <br />
                        ... "/usr/share/fonts/truetype/freefont/FreeMono.ttf", 24 )<br />
                        <br />
                        &gt;&gt;&gt; im = Image.new( "RBG", (400,300) )<br />
                        <br />
                        &gt;&gt;&gt; draw = ImageDraw.Draw( im )<br />
                        <br />
                        &gt;&gt;&gt; draw.text( (20,20), "SmallTEXT", font=smallfont )<br />
                        <br />
                        &gt;&gt;&gt; draw.text( (20,120), "LargeTEXT", font=largefont )<br />
                        <br />
                        &gt;&gt;&gt; im.save( "multitext.jpg" )<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>結果如：</p>
                        <div><img src="http://www.cnpython.org/docs_img/100/multitext.jpg" alt="python_imaging_pix/multitext.jpg" height="300" width="400" /></div>
                        <p>以上就是在 PIL 裡建立文字圖形的方法。</p>
                        <p>最後，我們要說明如何改變繪製圖形 (文字) 時的顏色；繪圖時畫筆的顏色是透過 draw 物件的 ink 屬性來改變的：</p>
                        <pre>&gt;&gt;&gt; draw.ink = 0 + 255*256 + 0*256*256<br />
                        <br />
                        <br />
                        <br />
                        </pre>
                        <p>以上會把畫筆設成綠色。ink   值必須要是一個整數，其值由色彩的 RGB 值算出。舉幾個 ink 值的例子：</p>
                        <ul>
                            <li>紅色的 ink 值應設為 255(R) +   0(G)*256 + 0(B)*256*256， </li>
                            <li>藍色的 ink 值應設為 0(R) +   0(G)*256 + 255(B)*256*256， </li>
                            <li>靛色的 ink 值應設為 0(R) +   255(G)*256 + 255(B)*256*256 </li>
                        </ul>
                        <p>所設定的 ink   會影響所有後續的繪圖動作。</p>
                        </div>
                        <h1><a id="id7" href="http://tech.seety.org/python/python_imaging.html#id1" name="id7">6&nbsp;&nbsp;&nbsp;結語</a></h1>
                        <p>本文介紹了方便好用的 PIL 套件，可以讓我們用 Python   撰寫影像處理的程式。我們對圖檔的格式處理、尺寸處理以及內容的編修都作了討論，最後也說明如何從零開始創作一個影像。</p>
                        <p>對網頁程式來說，動態產生簡單的影像是特別有用的功能，可以用來補足 HTML 與 CSS 的不足之處。利用 PIL   來執行批次影像處理的工作，更能省去我們許多的操作時間。相信讀者能從其中發現它所提供的生產力。</p>
                        </div>
                        <hr noshade="noshade" size="1" />
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/303986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-11-28 00:10 <a href="http://www.blogjava.net/Skynet/archive/2009/11/28/303986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell txt 分析小结</title><link>http://www.blogjava.net/Skynet/archive/2009/11/26/303750.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Thu, 26 Nov 2009 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/11/26/303750.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/303750.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/11/26/303750.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/303750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/303750.html</trackback:ping><description><![CDATA[<br />
<br />
<br />
<br />

<div style="width:425px;text-align:left" id="__ss_2587122"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/liukaiyi/shell-2587122" title="Shell脚本">Shell脚本</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=shell-091125211831-phpapp02&stripped_title=shell-2587122" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=shell-091125211831-phpapp02&stripped_title=shell-2587122" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/liukaiyi">liukaiyi</a>.</div></div>
<img src ="http://www.blogjava.net/Skynet/aggbug/303750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-11-26 11:27 <a href="http://www.blogjava.net/Skynet/archive/2009/11/26/303750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟我一起学 - 算法导论 - 递归式</title><link>http://www.blogjava.net/Skynet/archive/2009/11/25/303704.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Wed, 25 Nov 2009 15:09:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/11/25/303704.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/303704.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/11/25/303704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/303704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/303704.html</trackback:ping><description><![CDATA[<br />
看第二节&nbsp; - 递归树方法 ：<br />
突发奇想 能否 使用 txt 构造出 递归过程&nbsp; <br />
还是有 上此提到的 递归方法 分治排序<br />
<br />
<br />
<br />
&nbsp;<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;encoding:&nbsp;utf-8&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">arr</span><span style="color: #000000;">=</span><span style="color: #000000;">[]<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;printTree():<br />
&nbsp;&nbsp;&nbsp;&nbsp;ac&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;ii&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;0&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;r&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;arr&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c,ss,cc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;r&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[</span><span style="color: #800000;">'</span><span style="color: #800000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;xrange(cc</span><span style="color: #000000;">*</span><span style="color: #000000;">(c</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">))]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;xrange(len(sc))&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;cc&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;0&nbsp;:&nbsp;sc[i]</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">│</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">print&nbsp;"ci&nbsp;%s&nbsp;ii&nbsp;%s&nbsp;=&nbsp;%s&nbsp;"%(ci,ii,ii&nbsp;&lt;&nbsp;ci)</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;ii</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">c&nbsp;&nbsp;:&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">.join(sc)</span><span style="color: #000000;">+</span><span style="color: #800000;">"</span><span style="color: #800000;">├─</span><span style="color: #800000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">ss</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">&nbsp;&nbsp;</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">.join(sc)</span><span style="color: #000000;">+</span><span style="color: #800000;">"</span><span style="color: #800000;">└─</span><span style="color: #800000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">ss<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ac.append(&nbsp;sc&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;r&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;ac[::</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;r<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;MERGE(A,p,q,r):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">print&nbsp;"%s:%s&nbsp;-&nbsp;%s:%s"&nbsp;%&nbsp;(p,q+1,q+1,r+1)</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">==</span><span style="color: #000000;">q&nbsp;:&nbsp;L&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[A[p],</span><span style="color: #000000;">10</span><span style="color: #000000;">**</span><span style="color: #000000;">10</span><span style="color: #000000;">]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;:&nbsp;L&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;A[p:q</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">]</span><span style="color: #000000;">+</span><span style="color: #000000;">[</span><span style="color: #000000;">10</span><span style="color: #000000;">**</span><span style="color: #000000;">10</span><span style="color: #000000;">]<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;q</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">==</span><span style="color: #000000;">r&nbsp;:&nbsp;R&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[A[r],</span><span style="color: #000000;">10</span><span style="color: #000000;">**</span><span style="color: #000000;">10</span><span style="color: #000000;">]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;:&nbsp;R&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;A[q</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">:r</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">]</span><span style="color: #000000;">+</span><span style="color: #000000;">[</span><span style="color: #000000;">10</span><span style="color: #000000;">*</span><span style="color: #000000;">10</span><span style="color: #000000;">]<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;0<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;xrange(p,r</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;L[i]</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">R[j]&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A[k]</span><span style="color: #000000;">=</span><span style="color: #000000;">L[i]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">+=</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A[k]</span><span style="color: #000000;">=</span><span style="color: #000000;">R[j]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000;">+=</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;print&nbsp;"%s:%s&nbsp;=&nbsp;%s&nbsp;\n%s:%s&nbsp;=&nbsp;%s\n\n%s"&nbsp;%&nbsp;(&nbsp;p,q,&nbsp;L&nbsp;,&nbsp;q+1,r,R,&nbsp;A)</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;MERGE_SORT(A,p,r,c</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">r:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(p</span><span style="color: #000000;">+</span><span style="color: #000000;">r)</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERGE_SORT(A,p,q,c</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERGE_SORT(A,q</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,r,c</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr.append(&nbsp;(c,</span><span style="color: #800000;">"</span><span style="color: #800000;">%s&nbsp;-&nbsp;%s</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(&nbsp;A[p:q</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">],A[q</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">:r</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">])&nbsp;,&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">&nbsp;)&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;Debugging(A,p,q,r,&nbsp;sc&nbsp;)</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERGE(A,p,q,r)<br />
<br />
A</span><span style="color: #000000;">=</span><span style="color: #000000;">[</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">7</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">]<br />
MERGE_SORT(A,0,len(A)</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;A<br />
printTree()&nbsp;<br />
<br />
<br />
</span></div>
<br />
<br />
输出 （重下往上看&nbsp; 输出 排序过程 ，我就不多说了 应该很好理解了！！）：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">[1,&nbsp;2,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;7]<br />
├─[2,&nbsp;4,&nbsp;5,&nbsp;7]&nbsp;-&nbsp;[1,&nbsp;2,&nbsp;3,&nbsp;6]<br />
│&nbsp;&nbsp;├─[1,&nbsp;3]&nbsp;-&nbsp;[2,&nbsp;6]<br />
│&nbsp;&nbsp;│&nbsp;&nbsp;├─[2]&nbsp;-&nbsp;[6]<br />
│&nbsp;&nbsp;│&nbsp;&nbsp;└─[1]&nbsp;-&nbsp;[3]<br />
│&nbsp;&nbsp;├─[2,&nbsp;5]&nbsp;-&nbsp;[4,&nbsp;7]<br />
│&nbsp;&nbsp;│&nbsp;&nbsp;├─[7]&nbsp;-&nbsp;[4]<br />
│&nbsp;&nbsp;│&nbsp;&nbsp;└─[5]&nbsp;-&nbsp;[2]</span></div>
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/303704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-11-25 23:09 <a href="http://www.blogjava.net/Skynet/archive/2009/11/25/303704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解高斯函数，以及在推荐算法中的应用</title><link>http://www.blogjava.net/Skynet/archive/2009/11/19/302901.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Thu, 19 Nov 2009 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/11/19/302901.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/302901.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/11/19/302901.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/302901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/302901.html</trackback:ping><description><![CDATA[<br />
这是一个很有用的 公式比如：用户消费分值权重 ， 产品关联分值权重 等等 <br />
<br />
<br />
公式&nbsp; <img src="http://www.blogjava.net/images/blogjava_net/skynet/gsfun.png" alt="" border="0" /><br />
<br />
在 http://www.wolframalpha.com 中表示 :<br />
e = (1+1/n) ^n<br />
a*e^(-(x-b)^2/c^2)&nbsp; <br />
a 峰值最大值 <br />
b 峰值x轴偏移量<br />
c 弧度跨度 <br />
<br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/skynet/gs-z1.gif" alt="" border="0" />&nbsp; =&nbsp; 1*e^(-(x-1)^2/1^2) <br />
<img src="http://www.blogjava.net/images/blogjava_net/skynet/gs0.gif" alt="" border="0" /><br />
<br />
<br />
<br />
修改 峰值 a = 2<br />
<img src="http://www.blogjava.net/images/blogjava_net/skynet/gs-z2.gif" alt="" border="0" /><br />
<img src="http://www.blogjava.net/images/blogjava_net/skynet/gs-z2-c.gif" alt="" border="0" /><br />
<br />
这里 就 不一一展现 b 峰值x轴偏移量 ， c 弧度跨度 了 大家可以 去 wolframalpha 自己去尝试<br />
<br />
<br />
<br />
实例1 与时间有关的递减 ：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;math<br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;gaussian(x,peak</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">1.0</span><span style="color: rgb(0, 0, 0);">,axis</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">1.0</span><span style="color: rgb(0, 0, 0);">,span</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">1.0</span><span style="color: rgb(0, 0, 0);">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;peak</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">math.e</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">(x</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">axis)</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">(span)</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;)<br />
<br />
<br />
跨度&nbsp;c&nbsp;参考:<br />
c&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&nbsp;:&nbsp;在2.</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">&nbsp;附件急剧衰减<br />
c&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);"><br />
c&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">18</span><span style="color: rgb(0, 0, 0);">&nbsp;:</span><span style="color: rgb(0, 0, 0);">30</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;这个数&nbsp;衰减统计&nbsp;一个月&nbsp;不错</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">c&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">55</span><span style="color: rgb(0, 0, 0);">&nbsp;:</span><span style="color: rgb(0, 0, 0);">90</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;衰减统计&nbsp;一个季度&nbsp;不错</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">简单应用&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">消费1次得峰值4分&nbsp;浏览1次峰值2分&nbsp;<br />
统计某用户季度得分<br />
数据：在前10天浏览10次，消费1次&nbsp;，前11天浏览5次&nbsp;<br />
d10&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;gaussian(</span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">,span</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">55.0</span><span style="color: rgb(0, 0, 0);">)<br />
d11&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;gaussian(</span><span style="color: rgb(0, 0, 0);">11</span><span style="color: rgb(0, 0, 0);">,span</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">55.0</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;d10</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">d10</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">d11</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">结果&nbsp;33.0407089687</span></div>
<br />
<br />
倒的高斯　－　实例2&nbsp; ：<br />
公式 = <img src="http://www.blogjava.net/images/blogjava_net/skynet/gs-jjfun.gif" alt="" border="0" /><br />
<img src="http://www.blogjava.net/images/blogjava_net/skynet/gs_jj.gif" alt="" border="0" /><br />
&nbsp;<br />
目的　与次数有关的产品分值化
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">用户&nbsp;对&nbsp;某产品&nbsp;分值化</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;比如&nbsp;某用户&nbsp;用过某产品&nbsp;n次，我希望&nbsp;n&nbsp;无限大是一个&nbsp;渐进某个值&nbsp;而不是和&nbsp;n&nbsp;无限递增的</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">下面的&nbsp;fun&nbsp;结果是&nbsp;&nbsp;1.6&nbsp;～&nbsp;10&nbsp;分值直接的区域,&nbsp;也就是&nbsp;传说中的&nbsp;产品感兴趣&nbsp;&#8220;10分制&#8221;&nbsp;简易版&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;gs(x,peak</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">9.0</span><span style="color: rgb(0, 0, 0);">,axis</span><span style="color: rgb(0, 0, 0);">=-</span><span style="color: rgb(0, 0, 0);">2.0</span><span style="color: rgb(0, 0, 0);">,span</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">11.0</span><span style="color: rgb(0, 0, 0);">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">%.4f</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">peak</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">math.e</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">(x</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">axis)</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">(span)</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;)</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">peak</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />
<br />
<br />
</span><span style="color: rgb(0, 0, 0);">&gt;&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;gs(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">1.6451</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&gt;&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;gs(</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">2.1148</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&gt;&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;gs(</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">2.6800</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&gt;&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;gs(</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">3.3161</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&gt;&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;gs(</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">3.9970</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&gt;&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;gs(</span><span style="color: rgb(0, 0, 0);">6</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">4.6969</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&gt;&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;gs(</span><span style="color: rgb(0, 0, 0);">60</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">10.0000</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
</span></div>
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/302901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-11-19 11:14 <a href="http://www.blogjava.net/Skynet/archive/2009/11/19/302901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟我一起学 - 算法导论 - 插入排序</title><link>http://www.blogjava.net/Skynet/archive/2009/11/18/302864.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Wed, 18 Nov 2009 15:29:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/11/18/302864.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/302864.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/11/18/302864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/302864.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/302864.html</trackback:ping><description><![CDATA[算法导论 - 算法入门 ,一小节（插入排序,复杂度）
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;插入排序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 复杂度</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;insertion_sort(arr):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;1</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;j&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;xrange(&nbsp;</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,len(arr)&nbsp;):&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;n-1</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;arr[j]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;n-1</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;n-1</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">&gt;=</span><span style="color: rgb(0, 0, 0);">0&nbsp;</span><span style="color: rgb(0, 0, 255);">and</span><span style="color: rgb(0, 0, 0);">&nbsp;arr[i]</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;key&nbsp;: </span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;n(n-1)/2</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr[i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;arr[i]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;n(n-1)/2</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">i</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;n(n-1)/2</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr[i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;n-1</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;arr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;n-1</span><span style="color: rgb(0, 128, 0);"><br />
</span></div>
<br />
验证结果 :<br />
&gt;&gt;&gt; arr=[5,2,4,6,1,3]<br />
&gt;&gt;&gt; insertion_sort(arr)<br />
[2, 5, 4, 6, 1, 3]<br />
[2, 4, 5, 6, 1, 3]<br />
[2, 4, 5, 6, 1, 3]<br />
[1, 2, 4, 5, 6, 3]<br />
[1, 2, 3, 4, 5, 6]<br />
<br />
<br />
<br />
<br />
<br />
验证复杂度：<br />
z = 5(n-1)+1+3n(n-1)/2 <br />
我们测试数据 为&nbsp; n=6&nbsp; <br />
当数据极端情况就是需要全部重新排列 <br />
就是 [6,5,4,3,2,1] 要排出 [1,2,3,4,5,6] 这样<br />
&gt;&gt; z = 71 <br />
<br />
一种比较笨的 验证方法 供大家拍砖 :<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;insertion_sort(arr):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0<br />
&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;j&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;xrange(&nbsp;</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,len(arr)&nbsp;):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;arr[j]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">j</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">&gt;=</span><span style="color: rgb(0, 0, 0);">0&nbsp;</span><span style="color: rgb(0, 0, 255);">and</span><span style="color: rgb(0, 0, 0);">&nbsp;arr[i]</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;key&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr[i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;arr[i]&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">i</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr[i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;arr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">----</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,str(ii)<br />
</span></div>
<br />
&gt;&gt;&gt; arr=[6,5,4,3,2,1]<br />
&gt;&gt;&gt; insertion_sort(arr)<br />
[5, 6, 4, 3, 2, 1]<br />
[4, 5, 6, 3, 2, 1]<br />
[3, 4, 5, 6, 2, 1]<br />
[2, 3, 4, 5, 6, 1]<br />
[1, 2, 3, 4, 5, 6]<br />
---- 71&nbsp; #复杂度验证为 71 <br />
<br />
<br />
罗嗦下 n(n-1)/2<br />
极端情况下&nbsp; <br />
i=1 ; j 需要挪动 1次<br />
i=2 ; j 挪动 1+2次<br />
i=3 ; j 挪动 1+2+3次<br />
....<br />
i=n ; j 挪动 1+2....+n<br />
<br />
我们又找到 (1+n)+(2+n-1)+(3+n-2).... = (1+n)n/2<br />
我们这 的 i 是从 2 次开始的 也就是说&nbsp; (n-1)n/2 了 <br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;tn(ii):<br />
&nbsp;&nbsp;&nbsp;&nbsp;ti</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;xrange(ii)&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;j&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;xrange(i)&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ti</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;ti<br />
<br />
<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;tn(</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">)&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">1&nbsp;=&nbsp;1</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;tn(</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">)&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">3&nbsp;=&nbsp;1+2</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;tn(</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">)&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">6&nbsp;=&nbsp;1+2+3</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">..<br />
<br />
<br />
</span></div>
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/302864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-11-18 23:29 <a href="http://www.blogjava.net/Skynet/archive/2009/11/18/302864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件存储 - 数据结构(  py )</title><link>http://www.blogjava.net/Skynet/archive/2009/11/04/301072.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Wed, 04 Nov 2009 07:16:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/11/04/301072.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/301072.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/11/04/301072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/301072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/301072.html</trackback:ping><description><![CDATA[虽然 mysql,oracle 和&nbsp; Berkeley DB，sqlite3 等数据库已经很好 <br />
&nbsp;但是当我初略学习下 数据挖掘方面的一些知识发现，关系数据库远远不够来存储，查询 etl 后的数据 <br />
<br />
比如：我希望原始日志数据进行某一字段的排序,是不是很简单 。 <br />
&nbsp; 有人说&nbsp; - 数据导入数据库 load into table ... ， select order by 。之<br />
&nbsp; 还有人说 - linux sort -n... <br />
<br />
恩！很好，下面我们对大小为 1TB 的数据开始进行这个简单的操作&nbsp;&nbsp; -- 傻眼了 ！！<br />
&nbsp;&nbsp; 关于挖掘 - TB 级别的数量在我目前学习挖掘不到半年，就遇到过3-4次之多<br />
<br />
解决办法:<br />
对于这个问题 - 我现在希望能有个 大的链表 - <strong>（大到内存装不下）</strong>，<br />
&nbsp;<strong> 链表中的struct 结构为 </strong>:<br />
&nbsp;&nbsp; &gt;&gt; 排序属性文件归属<br />
&nbsp;&nbsp; &gt;&gt; 排序属性整条数据在文件中的 起始位置 - 结束位置<br />
&nbsp;&nbsp; &gt;&gt; 在排序中的排位 （ 链表结构,只记入比自己小的 属性在此链表的位置&nbsp; ）<br />
<br />
<br />
比如 : <br />
&nbsp; 1. 文件1内容 =&gt; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">说明:<br />
完整数据描述&nbsp;:&nbsp;<strong>此数据在文件中的&nbsp;起始位置（当然是通过程序取得的，这为了方便我标出）</strong><br />
..c<img src="http://www.blogjava.net/Images/dot.gif" alt="" />.&nbsp;&nbsp;0&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">22</span><span style="color: #000000;"><br />
..a<img src="http://www.blogjava.net/Images/dot.gif" alt="" />.&nbsp;&nbsp;</span><span style="color: #000000;">23</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">55</span><span style="color: #000000;"><br />
..b<img src="http://www.blogjava.net/Images/dot.gif" alt="" />.&nbsp;&nbsp;</span><span style="color: #000000;">56</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">76</span><span style="color: #000000;"><br />
..d<img src="http://www.blogjava.net/Images/dot.gif" alt="" />.&nbsp;&nbsp;</span><span style="color: #000000;">77</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">130</span><span style="color: #000000;"><br />
..f<img src="http://www.blogjava.net/Images/dot.gif" alt="" />.&nbsp;&nbsp;</span><span style="color: #000000;">131</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">220</span><span style="color: #000000;"><br />
..e<img src="http://www.blogjava.net/Images/dot.gif" alt="" />.&nbsp;&nbsp;</span><span style="color: #000000;">221</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">243</span></div>
<br />
&nbsp; 2. 数据结构预开空间 100 byte<br />
&nbsp; 3. 文件存储在描述 : # 链表排序我就不介绍了，数据结构的最基本技能，修改数据结构中的比自己小的指向 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我这就给出结果<br />
{ /tmp/文件1, 0-22 ,&nbsp; 300 }&nbsp;&nbsp; #说明 c ： 在链表位置 0 <br />
{ /tmp/文件1, 23-55 , 200 }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # a ： 100 <br />
{ /tmp/文件1, 56-76 , 0 }&nbsp;&nbsp;&nbsp;&nbsp; # b : 200 <br />
{ /tmp/文件1, 77-130 , 500 }&nbsp; # d : 300 <br />
{ /tmp/文件1, 131-220 ,&nbsp; } # f : 400 <br />
{ /tmp/文件1, 221-243 , 400 } # e : 500 <br />
<br />
4. 倒叙输出 由小到到 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 假设预存最小 为&nbsp; 200 链表位置<br />
&nbsp;&nbsp;&nbsp;&nbsp;
找出 使用 open /tmp/文件1&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 并使用 seek 文件游标 定位&nbsp; 23-55 取出&nbsp; ..a... <br />
&nbsp; &nbsp; &nbsp;&nbsp; 根据 链表中 200 到 seek 56 76 取出 ..b...<br />
&nbsp; &nbsp; &nbsp;&nbsp; 等等 <br />
<br />
当然 上面 <br />
&nbsp; 数据结构你可以使用 双向链表， btree , 红黑 , 斐波那契。。。（ 数据结构终于感觉有用了，不枉费我考的软证啊！）<br />
<br />
<br />
通过说明，我这 给大家提供个 可能需要的 技术细节 (py),不足之处 欢迎拍砖！！<br />
<br />
<strong>1. 二进制文件 结构化 写，修改</strong><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;"><strong>#指定修改 190 byte 处的 内容</strong><br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;os<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;struct&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;"><br />
fd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;os.open(&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">pack1.txt</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;os.O_RDWR</span><span style="color: #000000;">|</span><span style="color: #000000;">os.O_CREAT&nbsp;)<br />
<br />
ss&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pack(</span><span style="color: #800000;">'</span><span style="color: #800000;">ii11s</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">google</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
os.lseek(fs,&nbsp;len(ss)</span><span style="color: #000000;">*</span><span style="color: #000000;">10</span><span style="color: #000000;">,&nbsp;0)&nbsp;<br />
os.write(fs,ss)&nbsp;<br />
os.fsync(fs)<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">os.close(&nbsp;fs&nbsp;)</span><span style="color: #008000;"><br />
</span></div>
<br />
<br />
<br />
2. seek 指定位置结构化读取<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;struct&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;"><br />
file_object&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;open(</span><span style="color: #800000;">'</span><span style="color: #800000;">pack1.txt</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">rb</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;ts(si,ss</span><span style="color: #000000;">=</span><span style="color: #000000;">len(ss)):<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_object.seek(si</span><span style="color: #000000;">*</span><span style="color: #000000;">ss)<br />
&nbsp;&nbsp;&nbsp;&nbsp;chunk&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;file_object.read(ss)<br />
&nbsp;&nbsp;&nbsp;&nbsp;a,b,c</span><span style="color: #000000;">=</span><span style="color: #000000;">unpack(</span><span style="color: #800000;">'</span><span style="color: #800000;">ii11s</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;chunk&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;a,b,c<br />
<br />
ts(10)<br />
#输出&nbsp; </span>3 4 google<br />
<br />
</div>
<br />
<br />
<br />
<br />
<strong>1. 其他语言的 使用</strong><br />
struct 结构定义 ,在 python 中 使用&nbsp; struct 包，这样序列出来的数据到文件中其他语言也可以使用 <br />
&nbsp;参考: http://www.pythonid.com/bbs/archiver/?tid-285.html<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #000000;">pack1.py<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;struct&nbsp;</span><span style="color: #0000ff;">import</span>&nbsp;<span style="color: #000000;">*</span><span style="color: #000000;"><br />
<br />
<strong># i 为 int（4）&nbsp; 11s 为预留 11 位置 的 string <br />
# 此数据类型 为 19 byte ss&nbsp;</strong></span><span style="color: #000000;"><strong>=</strong></span><span style="color: #000000;"><strong>&nbsp;pack(</strong></span><span style="color: #800000;"><strong>'</strong></span><span style="color: #800000;"><strong>ii11s</strong></span><span style="color: #800000;"><strong>'</strong></span><span style="color: #000000;"><strong>,&nbsp;</strong></span><span style="color: #000000;"><strong>1</strong></span><span style="color: #000000;"><strong>,&nbsp;</strong></span><span style="color: #000000;"><strong>2</strong></span><span style="color: #000000;"><strong>,&nbsp;</strong></span><span style="color: #800000;"><strong>'</strong></span><span style="color: #800000;"><strong>hello&nbsp;world</strong></span><span style="color: #800000;"><strong>'</strong></span><span style="color: #000000;"><strong>)<br />
</strong><br />
f&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;open(</span><span style="color: #800000;">"</span><span style="color: #800000;">pack1.txt</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">wb</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
f.write(ss)<br />
f.close()<br />
<br />
<br />
上面的代码往C的结构中写入数据，结构包括两个整型和一个字符串。<br />
pack1.c<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">include&nbsp;&lt;stdio.h&gt;</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">include&nbsp;&lt;string.h&gt;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
struct&nbsp;AA<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;b;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;c[</span><span style="color: #000000;">64</span><span style="color: #000000;">];<br />
};<br />
<br />
int&nbsp;main()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;AA&nbsp;&nbsp;&nbsp;aa;<br />
&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">fp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size,&nbsp;readsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">aa,&nbsp;0,&nbsp;sizeof(struct&nbsp;AA));<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;fp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fopen(</span><span style="color: #800000;">"</span><span style="color: #800000;">pack1.txt</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">rb</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(NULL&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;fp)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">open&nbsp;file&nbsp;error!"n</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;readsize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sizeof(struct&nbsp;AA);<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">readsize:&nbsp;%d"n</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;readsize);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fread(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">aa,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;readsize,&nbsp;fp);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">read:&nbsp;%d"n</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;size);<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">a=%d,&nbsp;b=%d,&nbsp;c=%s"n</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;aa.a,&nbsp;aa.b,&nbsp;aa.c);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;0;<br />
}<br />
<br />
<strong>结果输出:</strong><br />
</span>C:"Documents and Settings"lky"桌面"dataStructure&gt;a<br />
readsize: 72<br />
read: 57<br />
a=1, b=2, c=hello word<strong><br />
</strong></div>
<strong><br />
<br />
</strong><br />
&nbsp; &nbsp; <br />
<strong>最后罗嗦下：</strong><br />
&nbsp; 能用数据结构了，很多东西都可以根据自己逻辑定制 存储很方便 。 不再受 关系数据库 , key 数据库 或 mapreduce 的限制 <br />
&nbsp;&nbsp; <br />
参考:<br />
http://docs.python.org/library/struct.html#module-struct&nbsp;&nbsp;&nbsp; #官方struct 包 说明<br />
http://blog.csdn.net/JGood/archive/2009/06/22/4290158.aspx&nbsp; # 使用 struct&nbsp; 的前辈留下的<br />
http://www.tutorialspoint.com/python/os_lseek.htm #一个小demo <br />
<a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/coderzh/archive/2008/05/10/1191410.html">Python天天美味(17) - open读写文件</a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/301072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-11-04 15:16 <a href="http://www.blogjava.net/Skynet/archive/2009/11/04/301072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>beanstalkd 消息队列的第一手资料</title><link>http://www.blogjava.net/Skynet/archive/2009/10/30/300325.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Fri, 30 Oct 2009 04:05:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/10/30/300325.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/300325.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/10/30/300325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/300325.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/300325.html</trackback:ping><description><![CDATA[<br />
beanstalk 消息队列 小结 <br />
协议说明和各状态转换情况<br />
<br />
<br />
<strong>基本知识点:</strong><br />
&nbsp; 1. 对于beanstalk 消息队列中每条数据都为 job<br />
&nbsp; 2. beanstalk service端 ，会维护 tubes[多个管道]<br />
&nbsp; 3. client端可以监听,使用多 tube<br />
&nbsp; 4. client端可以指定 use 管道[ client生成一个新的job时会把此job提交到 指定管道]<br />
&nbsp; 5. client端可以指定 watch 管道 [ client接收处理job时会到 指定管道得到待处理的job]<br />
<br />
<br />
<strong>官方示意图:</strong><br />
put&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reserve&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete<br />
-----&gt; [READY] ---------&gt; [RESERVED] --------&gt; *poof*<br />
<br />
<strong>一般情况:</strong><br />
1. 任务提交到service端,job 管理放入内存空间并为其标记状态 [READY] <br />
2. client通过轮训竞争得到次状态, job 改为&nbsp; [RESERVED]<br />
&nbsp;&nbsp; 2.1 当在默认时间 120 秒内没处理完 , job.stats.timeouts 就会大于 0 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时其他 轮训竞争client会拿到这个job【 注意了 每次timeouts时,在轮训的客户端就会得到次job，状态都为 ready,timeouts&gt;0 】<br />
3. 随便其中一台client处理完 job.delete&nbsp;&nbsp; , 其他 client 中的此job 都会&nbsp;&nbsp;&nbsp; *poof*&nbsp; <br />
<br />
<br />
<br />
<br />
<strong>deom - python beanstalkc 中 job.stats 参考:</strong><br />
<strong>使用 easy_install beanstalkc </strong><br />
<strong>API 参考 : http://github.com/earl/beanstalkc/blob/master/TUTORIAL</strong><br />
刚生成的 beanstalk<br />
{'buries': 0, 'releases': 0, 'tube': 'default', 'timeouts': 0, 'ttr': 120, <br />
'age': 6, 'pri': 2147483648L, 'delay': 0, '<strong>state</strong>': '<strong>reserved</strong>', '<strong>time-left</strong>': <strong>114</strong>, <br />
'kicks': 0, 'id': 2}<br />
<br />
以timeout了的 beanstalk,并且在其他client轮训到 job<br />
{'buries': 0, 'releases': 0, 'tube': 'default', 'timeouts': 1, 'ttr': 120, <br />
'age': 417, 'pri': 2147483648L, 'delay': 0, '<strong>state</strong>': '<strong>reserved</strong>', '<strong>time-left</strong>': <strong>110</strong>, <br />
'kicks': 0, 'id': 2}<br />
{'buries': 0, 'releases': 0, 'tube': 'default', 'timeouts': 1, 'ttr': 120, 'age': 415, <br />
'pri': 2147483648L, 'delay': 0, '<strong>state</strong>': '<strong>reserved</strong>', '<strong>time-left</strong>': <strong>4294967163L</strong>, <br />
'kicks': 0, 'id': 2}<br />
<br />
当没所有client 的 job 都到期 了 状态<br />
{'buries': 0, 'releases': 0, 'tube': 'default', 'timeouts': 2, 'ttr': 120, <br />
'age': 417, 'pri': 2147483648L, 'delay': 0, '<strong>state</strong>': '<strong>ready</strong>', '<strong>time-left</strong>': <strong>4294967161L</strong>, <br />
'kicks': 0, 'id': 2}<br />
{'buries': 0, 'releases': 0, 'tube': 'default', 'timeouts': 2, 'ttr': 120, 'age': 415, <br />
'pri': 2147483648L, 'delay': 0, '<strong>state</strong>': '<strong>ready</strong>', '<strong>time-left</strong>': <strong>4294967163L</strong>, <br />
'kicks': 0, 'id': 2}<br />
<br />
其中 client1 job.delete<br />
client1 job.stats&nbsp; *poof*<br />
client2 job.stats&nbsp; *poof*<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
比较全的状态说明 - [官方文档]<br />
http://github.com/kr/beanstalkd/blob/v1.1/doc/protocol.txt?raw=true<br />
<br />
官方示意图:<br />
&nbsp;
<img src="http://www.blogjava.net/images/blogjava_net/skynet/beanstalk.jpg" alt="" border="0" /><br />
<br />
<br />
<strong>先简单说明下（完全自己理解的，欢迎拍砖。本人E人太差~看官档费劲，谅解下）: </strong><br />
job.stats状态 = [READY] 待处理,&nbsp; [RESERVED] 正处理, [DELAYED]延迟状态 ,&nbsp; [BURIED] 隐藏状态<br />
<br />
<strong>1. 延迟提交</strong><br />
py.client1.put&gt;&gt;&gt; beanstalk.put('yes!', delay=10)<br />
py.client3.reserve&gt;&gt;&gt; job = beanstalk.reserve()<br />
# 等待 10&nbsp; 秒<br />
<br />
<strong>2. 管道测试</strong><br />
put-job到service端 可以指定 put的tube管道<br />
如: <br />
<br />
py.client1.put&gt;&gt;&gt; beanstalk.use('foo') <br />
py.client1.put&gt;&gt;&gt; beanstalk.put('hey!')<br />
<br />
py.client2.reserve&gt;&gt;&gt; job = beanstalk.reserve()<br />
# 一直拥塞，应为 他 watch 管道 'default'<br />
<br />
py.client3.reserve&gt;&gt;&gt; beanstalk.watch('foo')<br />
# beanstalk.ignore('bar') 放弃监听 bar<br />
py.client3.reserve&gt;&gt;&gt; job = beanstalk.reserve()<br />
py.client3.reserve&gt;&gt;&gt; job.body #输出 'hey!' <br />
<br />
<br />
<br />
<strong>3. 隐藏状态 现在吧 client 1/2/3 的 use watch 的管道都调回 default</strong><br />
py.client2.reserve&gt;&gt;&gt; job = beanstalk.reserve()<br />
py.client3.reserve&gt;&gt;&gt; job = beanstalk.reserve()<br />
py.client1.put&gt;&gt;&gt; beanstalk.put('隐藏状态!')<br />
py.client2.reserve&gt;&gt;&gt; job.bury() #2 轮训得到 并且 修改 job 为隐藏状态<br />
# 120 秒后 client3 没有轮训得到 此job <br />
py.client2.reserve&gt;&gt;&gt; job.stats() <br />
{'buries': 1, 'releases': 0, 'tube': 'default', 'timeouts': 0, 'ttr': 120, <br />
'age': 188, 'pri': 2147483648L, 'delay': 0, 'state': 'buried',<br />
'time-left': 4294967228L, 'kicks': 0, 'id': 11}<br />
py.client2.reserve&gt;&gt;&gt; beanstalk.kick( job.stats()['id'] ) #修改状态为 reserved<br />
# 立刻 client3 得到 job<br />
py.client3.reserve&gt;&gt;&gt; job.stats()<br />
{'buries': 1, 'releases': 0, 'tube': 'default', 'timeouts': 0, 'ttr': 120, 'age': 313, <br />
'pri': 2147483648L, 'delay': 0, 'state': 'reserved', <br />
'time-left': 110, 'kicks': 1, 'id': 11}<br />
# 这时候 client2 / 3 同时 有 job 11 状态 'buries': 1,'timeouts': 0,'state': 'reserved'<br />
<br />
<strong>4. peek 窥见</strong><br />
&nbsp; 可以得到 一个 stats - read 的 job ，其他 client 可以 job = beanstalk.reserve() <br />
&nbsp; 后马上 job.stats 会变成&nbsp; [RESERVED] <br />
&nbsp; py.client2.reserve&gt;&gt;&gt; job = beanstalk.peek_ready()<br />
&nbsp; 取得 job 并看 本 client 能 处理能<br />
&gt;&gt;&gt; job = beanstalk.peek(3)<br />
&gt;&gt;&gt; job.body<br />
&nbsp;&nbsp;&nbsp; 'yes!'<br />
&gt;&gt;&gt; job.stats()['state']<br />
&nbsp;&nbsp;&nbsp; 'ready'<br />
这种形式西 job 不能 bury 等修改状态，但 可以 delete<br />
<br />
peek 系类<br />
&nbsp;peek_buried<br />
&nbsp;peek_ready<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/300325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-10-30 12:05 <a href="http://www.blogjava.net/Skynet/archive/2009/10/30/300325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>消息队列  beanstalkd 介绍</title><link>http://www.blogjava.net/Skynet/archive/2009/10/28/300097.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Wed, 28 Oct 2009 11:21:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/10/28/300097.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/300097.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/10/28/300097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/300097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/300097.html</trackback:ping><description><![CDATA[<br />
首先 好东西 <br />
&nbsp; http://kr.github.com/beanstalkd/<br />
<br />
<br />
其次 真的是好东西 支持 java , python ,perl,ruby,erlang 和我不知道的 语言<br />
&nbsp; 官方的原文介绍：<br />
<div>
<pre>$ ./beanstalkd -d -l 10.0.1.5 -p 11300<br />
<br />
</pre>
</div>
<p>This starts up <code>beanstalkd</code> as a daemon listening on address 10.0.1.5, port 11300.</p>
<h2 id="use_it">Use It</h2>
<p>Here&#8217;s an example in Ruby (see the <a href="http://kr.github.com/beanstalkd/client.html">client libraries</a> to find your favorite language).</p>
<p>First, have one process put a job into the queue:</p>
<div>
<pre>beanstalk = Beanstalk::Pool.new(['10.0.1.5:11300'])<br />
<br />
beanstalk.put('hello')<br />
<br />
</pre>
</div>
<p>Then start another process to take jobs out of the queue and run them:</p>
<div>
<pre>beanstalk = Beanstalk::Pool.new(['10.0.1.5:11300'])<br />
<br />
loop do<br />
<br />
job = beanstalk.reserve<br />
<br />
puts job.body # prints "hello"<br />
<br />
job.delete<br />
<br />
end<br />
<br />
<br />
<br />
</pre>
</div>
<br />
<br />
<h2 id="thanks">Thanks</h2>
<p>Many thanks to <a href="http://www.danga.com/memcached/">memcached</a>
for providing inspiration for simple protocol design and for the
structure of the documentation. Not to mention a fantastic piece of
software!</p>
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/300097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-10-28 19:21 <a href="http://www.blogjava.net/Skynet/archive/2009/10/28/300097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python 图片加水印</title><link>http://www.blogjava.net/Skynet/archive/2009/10/27/299992.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Tue, 27 Oct 2009 15:49:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/10/27/299992.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/299992.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/10/27/299992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/299992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/299992.html</trackback:ping><description><![CDATA[<br />
&nbsp;参考 : http://mifunny.info/python-image-watermark-script-68.html<br />
<br />
&nbsp;下载 ：http://code.google.com/p/nothing-at-all/downloads/detail?name=watermark_py_20080724.tar.bz2&amp;can=2&amp;q=<br />
<br />
&nbsp; 直接解压:<br />
&nbsp; easy_install PIL<br />
&nbsp; &gt;&gt;python "watermark.py" "C:"Documents and Settings"lky"桌面"py"fangfei.jpg" 2<br />
<br />
&nbsp;&nbsp; Save to&nbsp; C:"Documents and Settings"lky"桌面"py"fangfei_watermark.jpg<br />
<br />
<br />
<br />
&nbsp; <img src="file:///C:/Documents%20and%20Settings/lky/%E6%A1%8C%E9%9D%A2/py/fangfei_watermark.jpg" alt="" /><br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/299992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-10-27 23:49 <a href="http://www.blogjava.net/Skynet/archive/2009/10/27/299992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python telnet 服务器</title><link>http://www.blogjava.net/Skynet/archive/2009/10/27/299963.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Tue, 27 Oct 2009 11:16:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/10/27/299963.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/299963.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/10/27/299963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/299963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/299963.html</trackback:ping><description><![CDATA[<br />
telnet 192.168.101.103 8014<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;threading&nbsp;&nbsp;<br />
<br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;myThread(threading.Thread):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__init__</span><span style="color: #000000;">(self,conn,add):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;threading.Thread.</span><span style="color: #800080;">__init__</span><span style="color: #000000;">(self)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.inputstr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">''</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;self.connection</span><span style="color: #000000;">=</span><span style="color: #000000;">conn<br />
&nbsp;&nbsp;&nbsp;&nbsp;self.address</span><span style="color: #000000;">=</span><span style="color: #000000;">add<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;run(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: #000000;">=</span><span style="color: #000000;">0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;True:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.connection.settimeout(</span><span style="color: #000000;">50</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.connection.recv(</span><span style="color: #000000;">1024</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;buf.rfind(</span><span style="color: #800000;">"</span><span style="color: #800000;">\n</span><span style="color: #800000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;:&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">**-</span><span style="color: #800000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">self.inputstr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.connection.close()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">:&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.inputstr</span><span style="color: #000000;">+=</span><span style="color: #000000;">buf<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;ii</span><span style="color: #000000;">==</span><span style="color: #000000;">0:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.connection.send(buf)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: #000000;">+=</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__name__</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">__main__</span><span style="color: #800000;">'</span><span style="color: #000000;">:&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;socket&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;sock&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;socket.socket(socket.AF_INET,&nbsp;socket.SOCK_STREAM)<br />
&nbsp;&nbsp;&nbsp;sock.bind((</span><span style="color: #800000;">'</span><span style="color: #800000;">192.168.101.103</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">8014</span><span style="color: #000000;">))&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;sock.listen(</span><span style="color: #000000;">5</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;True:&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection,address&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sock.accept()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ithread</span><span style="color: #000000;">=</span><span style="color: #000000;">myThread(connection,address)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ithread.start()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">except</span><span style="color: #000000;">&nbsp;socket.timeout:&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">time&nbsp;out</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;<br />
<br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/299963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-10-27 19:16 <a href="http://www.blogjava.net/Skynet/archive/2009/10/27/299963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>py django 引入 wiki 模块</title><link>http://www.blogjava.net/Skynet/archive/2009/10/21/299117.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Tue, 20 Oct 2009 16:13:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/10/21/299117.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/299117.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/10/21/299117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/299117.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/299117.html</trackback:ping><description><![CDATA[1. 安装 python 2.6 （鄙视下-python.org/download被屏蔽）<br />
2. <a href="http://www.ibm.com/developerworks/cn/linux/l-cppeak3.html" target="_blank" class="l" onmousedown="return clk(0,'','','res','5','','0CBYQFjAE')">可爱的<em>Python</em>: 使用setuptools 孵化<em>Python</em> egg</a><br />
3. easy_install django<br />
4. http://github.com/sneeu/django-wiki&nbsp; download&nbsp; <br />
5. django-admin.py startproject newtest<br />
6. cd newtest<br />
7. 拷贝 django-wiki 解压包到 newtest/wiki<br />
8. vim setting.py<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">DATABASE_ENGINE&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'sqlite3'</span><span style="color: #000000;"><br />
DATABASE_NAME&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'mysite.db' <br />
<br />
</span>INSTALLED_APPS = (<br />
&nbsp;&nbsp;&nbsp; ......<br />
&nbsp;&nbsp;&nbsp; 'newtest.wiki',<br />
)<br />
</div>
9. vim urls.py<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">urlpatterns&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;patterns(''</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;(r'^wiki/'</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;include('wiki.urls'))</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
)</span></div>
10. cd .. <br />
11. manage.py syncdb<br />
12. manage.py runserver<br />
<br />
13. http://127.0.0.1:8000/wiki/<br />
<br />
哦~ 不太好，改善改善！<br />
自己的定制自己的wiki 呵呵 <br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/299117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-10-21 00:13 <a href="http://www.blogjava.net/Skynet/archive/2009/10/21/299117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库测试生成脚本 - infobright </title><link>http://www.blogjava.net/Skynet/archive/2009/10/20/299016.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Tue, 20 Oct 2009 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/10/20/299016.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/299016.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/10/20/299016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/299016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/299016.html</trackback:ping><description><![CDATA[<br />
我这 对测试 mysql infobright 压缩 和 查询速度 进行测试<br />
测试结果我会尽快登出的 <br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">!/usr/bin/python</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;MySQLdb<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">conn&nbsp;=&nbsp;MySQLdb.Connection('127.0.0.1',&nbsp;'root',&nbsp;'',&nbsp;'dmspi')</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">conn</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">MySQLdb.connect(host</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">127.0.0.1</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,port</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">3307</span><span style="color: rgb(0, 0, 0);">,user</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">root</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,passwd</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">,db</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">test</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />
cur&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;conn.cursor()<br />
st&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">create&nbsp;table&nbsp;testtime4&nbsp;(&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;cc&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;xrange(</span><span style="color: rgb(0, 0, 0);">1000</span><span style="color: rgb(0, 0, 0);">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;cc&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;0&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">a</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">str(cc)</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">&nbsp;varchar(20),\n</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">a</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">str(cc)</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">&nbsp;int(20),\n</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">a&nbsp;int(20)</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">);</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.execute(st)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);"># import</span><span style="color: rgb(0, 0, 0);">&nbsp;sys<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # sys.exit(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;random<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ccs&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">lambda</span><span style="color: rgb(0, 0, 0);">&nbsp;:&nbsp;random.choice([</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">apple</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">pear</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">peach</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">orange</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">lemon</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(128, 0, 0);">''</span><span style="color: rgb(0, 0, 0);">])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ccn&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">lambda</span><span style="color: rgb(0, 0, 0);">&nbsp;:&nbsp;random.randint(0,</span><span style="color: rgb(0, 0, 0);">10000</span><span style="color: rgb(0, 0, 0);">)<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;open(</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">/data/logs/dataFormat/test/t4.data</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">w</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;cc&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;xrange(</span><span style="color: rgb(0, 0, 0);">10000000</span><span style="color: rgb(0, 0, 0);">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">''</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;ccs()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nn&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;str(ccn())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;cc&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;xrange(</span><span style="color: rgb(0, 0, 0);">1000</span><span style="color: rgb(0, 0, 0);">):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;cc&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">15</span><span style="color: rgb(0, 0, 0);">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;cc&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;0&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">&nbsp;ss</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">\t</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">&nbsp;nn</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">\t</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">\t</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">&nbsp;nn<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&gt;&gt;</span><span style="color: rgb(0, 0, 0);">fd,st<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd.close()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # cur.execute(</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">load&nbsp;data&nbsp;infile&nbsp;\</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">data</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">logs</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">dataFormat</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">test</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">t4.data\</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">&nbsp;&nbsp;into&nbsp;table&nbsp;testtime4&nbsp;fields&nbsp;terminated&nbsp;by&nbsp;"\t";</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(0, 0, 255);">finally</span><span style="color: rgb(0, 0, 0);">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.close()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close()</span></div>
<br />
<br />
mysql infobright 测试结果报告：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);"><br />
<br />
<br />
一千万条数据导入花费时间:<br />
<br />
mysql</span><span style="color: rgb(128, 128, 128);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">load</span><span style="color: rgb(0, 0, 0);">&nbsp;data&nbsp;infile&nbsp;</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(255, 0, 0);">/data/logs/dataFormat/test/t4.data</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">into</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">table</span><span style="color: rgb(0, 0, 0);">&nbsp;testtime4&nbsp;fields&nbsp;terminated&nbsp;</span><span style="color: rgb(0, 0, 255);">by</span><span style="color: rgb(0, 0, 0);">&nbsp;"\t";<br />
Query&nbsp;OK,&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">10000000</span><span style="color: rgb(0, 0, 0);">&nbsp;rows&nbsp;affected&nbsp;(</span><span style="color: rgb(128, 0, 0); font-weight: bold;">36</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(255, 0, 255);">min</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">47.00</span><span style="color: rgb(0, 0, 0);">&nbsp;sec)<br />
<br />
<br />
测试一&nbsp;:<br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1</span><span style="color: rgb(0, 0, 0);">.&nbsp;表属性&nbsp;有&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">500</span><span style="color: rgb(0, 0, 0);">&nbsp;列&nbsp;<br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">2</span><span style="color: rgb(0, 0, 0);">.&nbsp;属性列都有值,&nbsp;无&nbsp;</span><span style="color: rgb(0, 0, 255);">Null</span><span style="color: rgb(0, 0, 0);">&nbsp;数据<br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">3</span><span style="color: rgb(0, 0, 0);">.&nbsp;原始文件大小&nbsp;26G&nbsp;,导入数据仓库&nbsp;5G<br />
<br />
部分测试时间：<br />
</span><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(255, 0, 255);">count</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(128, 128, 128);">*</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);">&nbsp;testtime&nbsp;</span><span style="color: rgb(0, 0, 255);">where</span><span style="color: rgb(0, 0, 0);">&nbsp;a0</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(0, 0, 0);">"pear"&nbsp;</span><span style="color: rgb(128, 128, 128);">and</span><span style="color: rgb(0, 0, 0);">&nbsp;a2</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(0, 0, 0);">"orange";<br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1</span><span style="color: rgb(0, 0, 0);">&nbsp;row&nbsp;</span><span style="color: rgb(128, 128, 128);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(128, 0, 0); font-weight: bold;">3.63</span><span style="color: rgb(0, 0, 0);">&nbsp;sec)<br />
<br />
</span><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);">&nbsp;a6,</span><span style="color: rgb(255, 0, 255);">count</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(128, 128, 128);">*</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);">&nbsp;testtime&nbsp;</span><span style="color: rgb(0, 0, 255);">group</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">by</span><span style="color: rgb(0, 0, 0);">&nbsp;a6&nbsp;</span><span style="color: rgb(0, 0, 255);">order</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">by</span><span style="color: rgb(0, 0, 0);">&nbsp;a6&nbsp;</span><span style="color: rgb(0, 0, 255);">desc</span><span style="color: rgb(0, 0, 0);">&nbsp;;<br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">5</span><span style="color: rgb(0, 0, 0);">&nbsp;rows&nbsp;</span><span style="color: rgb(128, 128, 128);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(128, 0, 0); font-weight: bold;">2.24</span><span style="color: rgb(0, 0, 0);">&nbsp;sec)<br />
<br />
mysql</span><span style="color: rgb(128, 128, 128);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(255, 0, 255);">count</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(128, 128, 128);">*</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);">&nbsp;testtime&nbsp;</span><span style="color: rgb(0, 0, 255);">where</span><span style="color: rgb(0, 0, 0);">&nbsp;a0</span><span style="color: rgb(128, 128, 128);">=</span><span style="color: rgb(0, 0, 0);">"apple"&nbsp;;<br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1</span><span style="color: rgb(0, 0, 0);">&nbsp;row&nbsp;</span><span style="color: rgb(128, 128, 128);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(128, 0, 0); font-weight: bold;">5.68</span><span style="color: rgb(0, 0, 0);">&nbsp;sec)<br />
<br />
<br />
测试二&nbsp;:<br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1</span><span style="color: rgb(0, 0, 0);">.&nbsp;表属性&nbsp;有&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1000</span><span style="color: rgb(0, 0, 0);">&nbsp;列&nbsp;<br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">2</span><span style="color: rgb(0, 0, 0);">.&nbsp;属性列前&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">15</span><span style="color: rgb(0, 0, 0);">&nbsp;列有值&nbsp;,&nbsp;其余后面都为&nbsp;</span><span style="color: rgb(0, 0, 255);">Null</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">3</span><span style="color: rgb(0, 0, 0);">.&nbsp;原始文件大小&nbsp;10G&nbsp;,导入数据仓库&nbsp;215M<br />
<br />
mysql</span><span style="color: rgb(128, 128, 128);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);">&nbsp;a0,</span><span style="color: rgb(255, 0, 255);">count</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(128, 128, 128);">*</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);">&nbsp;testtime4&nbsp;</span><span style="color: rgb(0, 0, 255);">group</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">by</span><span style="color: rgb(0, 0, 0);">&nbsp;a0&nbsp;;<br />
</span><span style="color: rgb(128, 128, 128);">+</span><span style="color: rgb(0, 128, 128);">--</span><span style="color: rgb(0, 128, 128);">------+----------+</span><span style="color: rgb(0, 128, 128);"><br />
</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;a0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(255, 0, 255);">count</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(128, 128, 128);">*</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(128, 128, 128);">+</span><span style="color: rgb(0, 128, 128);">--</span><span style="color: rgb(0, 128, 128);">------+----------+</span><span style="color: rgb(0, 128, 128);"><br />
</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;lemon&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1665543</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;peach&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1666276</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;orange&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1667740</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;pear&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1665910</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;apple&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1665678</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">NULL</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(128, 0, 0); font-weight: bold;">1668863</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 128, 128);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(128, 128, 128);">+</span><span style="color: rgb(0, 128, 128);">--</span><span style="color: rgb(0, 128, 128);">------+----------+</span><span style="color: rgb(0, 128, 128);"><br />
</span><span style="color: rgb(128, 0, 0); font-weight: bold;">6</span><span style="color: rgb(0, 0, 0);">&nbsp;rows&nbsp;</span><span style="color: rgb(128, 128, 128);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">set</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(128, 0, 0); font-weight: bold;">4.55</span><span style="color: rgb(0, 0, 0);">&nbsp;sec)<br />
<br />
<br />
</span>select * from testtime4 order by a6 desc limit 2000000,1 ;<br />
1 row in set (3.30 sec)<br />
<br />
</div>
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/299016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-10-20 13:44 <a href="http://www.blogjava.net/Skynet/archive/2009/10/20/299016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ftp 上传(py)</title><link>http://www.blogjava.net/Skynet/archive/2009/09/09/294414.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Wed, 09 Sep 2009 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/09/09/294414.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/294414.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/09/09/294414.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/294414.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/294414.html</trackback:ping><description><![CDATA[<br />
什么都不说，在代码里<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">!/usr/bin/env&nbsp;python</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">-*-&nbsp;encoding:&nbsp;utf8&nbsp;-*-</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;ftplib&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;FTP<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;sys,os,getopt<br />
<br />
opts,args</span><span style="color: #000000;">=</span><span style="color: #000000;">getopt.getopt(sys.argv[</span><span style="color: #000000;">1</span><span style="color: #000000;">:],</span><span style="color: #800000;">'</span><span style="color: #800000;">hf:d:i:u:p:</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;usage():<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'''</span><span style="color: #800000;"><br />
Help&nbsp;Information:<br />
&nbsp;&nbsp;上传正常结束后,会在上次文件边创建成功状态文件夹，名称为&nbsp;[上次文件名.state&nbsp;]<br />
&nbsp;&nbsp;&nbsp;&nbsp;-h&nbsp;:&nbsp;Show&nbsp;help&nbsp;information<br />
&nbsp;&nbsp;&nbsp;&nbsp;-f :&nbsp;local&nbsp;upload&nbsp;file&nbsp;&nbsp;&nbsp;eg&nbsp;-&gt;&nbsp;/home/user/xx/file.tar<br />
&nbsp;&nbsp;&nbsp;&nbsp;-d&nbsp;:&nbsp;upload&nbsp;to&nbsp;ftp&nbsp;path&nbsp;&nbsp;eg&nbsp;-&gt;&nbsp;/x/xx/xxx&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;-i&nbsp;:&nbsp;[optional]&nbsp;Default&nbsp;122.102.xx.xx<br />
&nbsp;&nbsp;&nbsp;&nbsp;-u&nbsp;:&nbsp;[optional]&nbsp;Default xx<br />
&nbsp;&nbsp;&nbsp;&nbsp;-p&nbsp;:&nbsp;[optional]&nbsp;Default&nbsp;***&nbsp;(xx passwd)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">'''</span><span style="color: #000000;"><br />
<br />
<br />
fip</span><span style="color: #000000;">=</span><span style="color: #800000;">'</span><span style="color: #800000;">122.xx.xx.xx</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
fur</span><span style="color: #000000;">=</span><span style="color: #800000;">'xx</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
fpw</span><span style="color: #000000;">=</span><span style="color: #800000;">'</span><span style="color: #800000;">123</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;o,a&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;opts:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;o</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">-h</span><span style="color: #800000;">'</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usage()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;o</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">-f</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;:&nbsp;upload_file</span><span style="color: #000000;">=</span><span style="color: #000000;">a<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;o</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">-d</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;:&nbsp;ftp_path</span><span style="color: #000000;">=</span><span style="color: #000000;">a<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;o</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">-i</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;:&nbsp;fip</span><span style="color: #000000;">=</span><span style="color: #000000;">a<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;o</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">-u</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;:&nbsp;fur</span><span style="color: #000000;">=</span><span style="color: #000000;">a<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;o</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">-p</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;:&nbsp;fpw</span><span style="color: #000000;">=</span><span style="color: #000000;">a<br />
<br />
<br />
ftp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FTP(fip)<br />
ftp.login(fur,fpw)<br />
<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;(&nbsp;locals().has_key(</span><span style="color: #800000;">'</span><span style="color: #800000;">ftp_path</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;locals().has_key(</span><span style="color: #800000;">'</span><span style="color: #800000;">upload_file</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;):<br />
&nbsp;&nbsp;&nbsp;&nbsp;usage()<br />
&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()<br />
<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;迭代&nbsp;创建&nbsp;目录&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">to_path</span><span style="color: #000000;">=</span><span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;sp&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;ftp_path.split(</span><span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">)[</span><span style="color: #000000;">1</span><span style="color: #000000;">:]:<br />
&nbsp;&nbsp;&nbsp;&nbsp;drs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ftp.nlst(to_path)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;to_path</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">:to_path</span><span style="color: #000000;">+=</span><span style="color: #000000;">sp<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;:&nbsp;to_path</span><span style="color: #000000;">+=</span><span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">sp<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;to_path&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;drs&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp.mkd(to_path)<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">到&nbsp;最终&nbsp;目录下&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">ftp.cwd(to_path)<br />
<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;上传准备</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">bufsize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1024</span><span style="color: #000000;"><br />
file_handler&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;open(upload_file,</span><span style="color: #800000;">'</span><span style="color: #800000;">rb</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
file_name</span><span style="color: #000000;">=</span><span style="color: #000000;">os.path.split(upload_file)[</span><span style="color: #000000;">1</span><span style="color: #000000;">]<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;判定是否&nbsp;有&nbsp;上传完&nbsp;状态文件夹，如果有删除</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">sfile</span><span style="color: #000000;">=</span><span style="color: #000000;">to_path</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">file_name</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">.state</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;sfile&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;ftp.nlst(to_path):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">[Resend]&nbsp;delete&nbsp;original&nbsp;dir&nbsp;state&nbsp;</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">sfile<br />
&nbsp;&nbsp;&nbsp;&nbsp;ftp.rmd(&nbsp;sfile&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;上传文件</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">ftp.storbinary(</span><span style="color: #800000;">'</span><span style="color: #800000;">STOR&nbsp;%s</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(file_name),file_handler,bufsize)<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;如果&nbsp;上传&nbsp;文件大小不一&nbsp;，不标注&nbsp;成功&nbsp;上传&nbsp;状态文件夹&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;os.path.getsize(upload_file)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;ftp.size(to_path</span><span style="color: #000000;">+</span><span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">file_name)&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">[Error]&nbsp;&nbsp;upload&nbsp;to&nbsp;ftp&nbsp;size&nbsp;Different&nbsp;!&nbsp;</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;上传&nbsp;成功&nbsp;创建标示状态&nbsp;文件夹&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">ftp.mkd(sfile)<br />
file_handler.close()<br />
ftp.quit()<br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/294414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-09-09 10:01 <a href="http://www.blogjava.net/Skynet/archive/2009/09/09/294414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hadoop jython join  ( 1 )</title><link>http://www.blogjava.net/Skynet/archive/2009/09/08/294261.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Tue, 08 Sep 2009 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/09/08/294261.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/294261.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/09/08/294261.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/294261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/294261.html</trackback:ping><description><![CDATA[<br />
首先 本文中的 hadoop join&nbsp; 在实际开发没有用处！<br />
如果在开发中 请使用 <span style="border-collapse: separate; color: #000000; font-family: Simsun; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="border-collapse: collapse; color: #333333; font-family: arial; font-size: 13px;">cascading&nbsp; groupby, 进行 hadoop join,<br />
本文只是为探讨弄懂 cascading 实现做准备。<br />
</span></span><br />
当然 如果有有人 hadoop join 过 请联系我，大家交流下 ！<br />
<br />
文件可能需要的一些参考：<br />
<a id="homepage1_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl01_TitleUrl" href="../../Skynet/archive/2009/09/04/293914.html">hadoop jython ( windows )</a><br />
jython ，jython 编译以及jar 包 <br />
少量 linux shell <br />
<br />
<br />
本文介绍 hadoop 可能使用到的 join 接口测试 ，已经参考：<br />
<font style="font-size: 14px;"><strong>使用Hadoop实现Inner Join操作的方法【from淘宝】</strong></font>：http://labs.chinamobile.com/groups/58_547 <br />
<br />
下面 测试后 ，我这大体上 对 hadoop&nbsp; join 的方式是这样理解的 （猜想）：<br />
数据1 ; 数据2<br />
<strong>job1</strong>.map( 数据1 ) =（临时文件1）&gt;&nbsp; 文件标示1+需要join列&nbsp; 数据<br />
<strong>job2</strong>.map( 数据2 ) =（临时文件2）&gt;&nbsp; 文件标示2+需要join列&nbsp; 数据<br />
<br />
临时文件 <strong><span style="color: #800000;">mapred.join.expr </span></strong>生成<br />
<strong>job3.map -&gt; </strong><br />
文件标示1+需要join列 : 数据<br />
文件标示2+需要join列 : 数据<br />
......<br />
<strong>job3.Combiner - &gt;</strong><br />
需要join列 : 文件标示1+数据<br />
需要join列 : 文件标示2+数据<br />
<strong>job3.Reducer-&gt;</strong><br />
需要join列 : 使用 java-list &gt; 生成 <strong><br />
</strong><strong>&nbsp; 文件2-列x</strong> [&nbsp; 数据,数据... ]<br />
&nbsp; <strong>文件1-列x</strong> [&nbsp; 数据,数据... ]<br />
然后 你这 left join ,或 inner join 或 xxx join 逻辑 就自己来吧<br />
<br />
<br />
结果集合<br />
[root@localhost python]# cat /home/megajobs/del/jobs/tools/hadoop-0.18.3/data/090907/1<br />
1<br />
2<br />
3<br />
4<br />
5<br />
[root@localhost python]# cat /home/megajobs/del/jobs/tools/hadoop-0.18.3/data/090907/2<br />
2<br />
4<br />
3<br />
1<br />
<br />
修改 ..../hadoop-0.18.3/src/examples/python/compile<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">!/usr/bin/env&nbsp;bash</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
export&nbsp;HADOOP_HOME</span><span style="color: #000000;">=/</span><span style="color: #000000;">home</span><span style="color: #000000;">/xx</span><span style="color: #000000;">/</span><span style="color: #000000;">del</span><span style="color: #000000;">/</span><span style="color: #000000;">jobs</span><span style="color: #000000;">/</span><span style="color: #000000;">tools</span><span style="color: #000000;">/</span><span style="color: #000000;">hadoop</span><span style="color: #000000;">-</span><span style="color: #800000;">0.18</span><span style="color: #000000;">.</span><span style="color: #800000;">3</span><span style="color: #000000;"><br />
export&nbsp;CASCADING_HOME</span><span style="color: #000000;">=/</span><span style="color: #000000;">home</span><span style="color: #000000;">/xx</span><span style="color: #000000;">/</span><span style="color: #000000;">del</span><span style="color: #000000;">/</span><span style="color: #000000;">jobs</span><span style="color: #000000;">/</span><span style="color: #000000;">tools</span><span style="color: #000000;">/</span><span style="color: #000000;">cascading</span><span style="color: #000000;">-</span><span style="color: #800000;">1.0</span><span style="color: #000000;">.</span><span style="color: #800000;">16</span><span style="color: #000000;">-</span><span style="color: #000000;">hadoop</span><span style="color: #000000;">-</span><span style="color: #800000;">0.18</span><span style="color: #000000;">.</span><span style="color: #800000;">3</span><span style="color: #000000;"><br />
export&nbsp;JYTHON_HOME</span><span style="color: #000000;">=/</span><span style="color: #000000;">home</span><span style="color: #000000;">/xx</span><span style="color: #000000;">/</span><span style="color: #000000;">del</span><span style="color: #000000;">/</span><span style="color: #000000;">jobs</span><span style="color: #000000;">/</span><span style="color: #000000;">tools</span><span style="color: #000000;">/</span><span style="color: #000000;">jython2</span><span style="color: #000000;">.</span><span style="color: #800000;">2.1</span><span style="color: #000000;"><br />
<br />
export&nbsp;CLASSPATH</span><span style="color: #000000;">=</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">$HADOOP_HOME/hadoop-0.18.3-core.jar</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;so&nbsp;that&nbsp;filenames&nbsp;w/&nbsp;spaces&nbsp;are&nbsp;handled&nbsp;correctly&nbsp;in&nbsp;loops&nbsp;below</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">IFS</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;add&nbsp;libs&nbsp;to&nbsp;CLASSPATH</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;f&nbsp;in&nbsp;</span><span style="color: #800080;">$HADOOP_HOME</span><span style="color: #000000;">/</span><span style="color: #000000;">lib</span><span style="color: #000000;">/*.</span><span style="color: #000000;">jar;&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;CLASSPATH</span><span style="color: #000000;">=</span><span style="color: #000000;">${CLASSPATH}</span><span style="color: #000000;">:</span><span style="color: #800080;">$f</span><span style="color: #000000;">;<br />
done<br />
<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;f&nbsp;in&nbsp;</span><span style="color: #800080;">$HADOOP_HOME</span><span style="color: #000000;">/</span><span style="color: #000000;">lib</span><span style="color: #000000;">/</span><span style="color: #000000;">jetty</span><span style="color: #000000;">-</span><span style="color: #000000;">ext</span><span style="color: #000000;">/*.</span><span style="color: #000000;">jar;&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br />
&nbsp;&nbsp;CLASSPATH</span><span style="color: #000000;">=</span><span style="color: #000000;">${CLASSPATH}</span><span style="color: #000000;">:</span><span style="color: #800080;">$f</span><span style="color: #000000;">;<br />
done<br />
<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;f&nbsp;in&nbsp;</span><span style="color: #800080;">$CASCADING_HOME</span><span style="color: #000000;">/*.</span><span style="color: #000000;">jar;&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br />
&nbsp;&nbsp;CLASSPATH</span><span style="color: #000000;">=</span><span style="color: #000000;">${CLASSPATH}</span><span style="color: #000000;">:</span><span style="color: #800080;">$f</span><span style="color: #000000;">;<br />
done<br />
<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;f&nbsp;in&nbsp;</span><span style="color: #800080;">$CASCADING_HOME</span><span style="color: #000000;">/</span><span style="color: #000000;">lib</span><span style="color: #000000;">/*.</span><span style="color: #000000;">jar;&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br />
&nbsp;&nbsp;CLASSPATH</span><span style="color: #000000;">=</span><span style="color: #000000;">${CLASSPATH}</span><span style="color: #000000;">:</span><span style="color: #800080;">$f</span><span style="color: #000000;">;<br />
done<br />
<br />
<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;f&nbsp;in&nbsp;</span><span style="color: #800080;">$JYTHON_HOME</span><span style="color: #000000;">/*.</span><span style="color: #000000;">jar;&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br />
&nbsp;&nbsp;CLASSPATH</span><span style="color: #000000;">=</span><span style="color: #000000;">${CLASSPATH}</span><span style="color: #000000;">:</span><span style="color: #800080;">$f</span><span style="color: #000000;">;<br />
done<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;restore&nbsp;ordinary&nbsp;behaviour</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">unset&nbsp;IFS<br />
<br />
</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/xx</span><span style="color: #000000;">/</span><span style="color: #000000;">del</span><span style="color: #000000;">/</span><span style="color: #000000;">jobs</span><span style="color: #000000;">/</span><span style="color: #000000;">tools</span><span style="color: #000000;">/</span><span style="color: #000000;">jython2</span><span style="color: #000000;">.</span><span style="color: #800000;">2.1</span><span style="color: #000000;">/</span><span style="color: #000000;">jythonc&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">p&nbsp;org</span><span style="color: #000000;">.</span><span style="color: #000000;">apache</span><span style="color: #000000;">.</span><span style="color: #000000;">hadoop</span><span style="color: #000000;">.</span><span style="color: #000000;">examples&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">d&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">j&nbsp;$</span><span style="color: #800000;">1</span><span style="color: #000000;">.</span><span style="color: #000000;">jar&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">c&nbsp;$</span><span style="color: #800000;">1</span><span style="color: #000000;">.</span><span style="color: #000000;">py&nbsp;<br />
</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/xx</span><span style="color: #000000;">/</span><span style="color: #000000;">del</span><span style="color: #000000;">/</span><span style="color: #000000;">jobs</span><span style="color: #000000;">/</span><span style="color: #000000;">tools</span><span style="color: #000000;">/</span><span style="color: #000000;">hadoop</span><span style="color: #000000;">-</span><span style="color: #800000;">0.18</span><span style="color: #000000;">.</span><span style="color: #800000;">3</span><span style="color: #000000;">/</span><span style="color: #000000;">bin</span><span style="color: #000000;">/</span><span style="color: #000000;">hadoop&nbsp;jar&nbsp;$</span><span style="color: #800000;">1</span><span style="color: #000000;">.</span><span style="color: #000000;">jar&nbsp;$</span><span style="color: #800000;">2</span><span style="color: #000000;">&nbsp;$</span><span style="color: #800000;">3</span><span style="color: #000000;">&nbsp;$</span><span style="color: #800000;">4</span><span style="color: #000000;">&nbsp;$</span><span style="color: #800000;">5</span><span style="color: #000000;">&nbsp;$</span><span style="color: #800000;">6</span><span style="color: #000000;">&nbsp;$</span><span style="color: #800000;">7</span><span style="color: #000000;">&nbsp;$</span><span style="color: #800000;">8</span><span style="color: #000000;">&nbsp;$</span><span style="color: #800000;">9</span><span style="color: #000000;">&nbsp; <br />
</span></div>
<br />
<br />
简单 <strong>数据 链接 </strong>:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.fs&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.io&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.mapred.lib&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.mapred.join&nbsp;&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.mapred&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;sys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;getopt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;tMap(Mapper,&nbsp;MapReduceBase):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;map(self,&nbsp;key,&nbsp;value,&nbsp;output,&nbsp;reporter):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.collect(&nbsp;Text(&nbsp;str(key)&nbsp;)&nbsp;,&nbsp;Text(&nbsp;value.toString()&nbsp;))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;main(args):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;JobConf(tMap)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setJobName(</span><span style="color: #800000;">"</span><span style="color: #800000;">wordcount</span><span style="color: #800000;">"</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setMapperClass(&nbsp;tMap&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputFormat.setInputPaths(conf,[&nbsp;Path(sp)&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;sp&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;args[</span><span style="color: #000000;">1</span><span style="color: #000000;">:</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputKeyClass(&nbsp;Text&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputValueClass(&nbsp;Text&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputPath(Path(args[</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JobClient.runJob(conf)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__name__</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">__main__</span><span style="color: #800000;">"</span><span style="color: #000000;">:main(sys.argv)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
</span></div>
<br />
运行 <br />
./compile test file:///home/xx/del/jobs/tools/hadoop-0.18.3/data/090907/1 file:///home/xx/del/jobs/tools/hadoop-0.18.3/data/090907/2&nbsp;&nbsp; file:///home/xx/del/jobs/tools/hadoop-0.18.3/tmp/wc78<br />
结果:<br />
[xx@localhost wc78]$ cat ../wc78/part-00000 <br />
0&nbsp;&nbsp; &nbsp;1<br />
0&nbsp;&nbsp; &nbsp;2<br />
2&nbsp;&nbsp; &nbsp;4<br />
2&nbsp;&nbsp; &nbsp;2<br />
4&nbsp;&nbsp; &nbsp;3<br />
4&nbsp;&nbsp; &nbsp;3<br />
6&nbsp;&nbsp; &nbsp;1<br />
6&nbsp;&nbsp; &nbsp;4<br />
8&nbsp;&nbsp; &nbsp;5<br />
<br />
<br />
简单的数据 join :<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.fs&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;Path<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.io&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.mapred.lib&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.mapred.join&nbsp;&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;org.apache.hadoop.mapred&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;sys<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;getopt<br />
<br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;tMap(Mapper,&nbsp;MapReduceBase):</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;map(self,&nbsp;key,&nbsp;value,&nbsp;output,&nbsp;reporter):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.collect(&nbsp;Text(&nbsp;str(key)&nbsp;)&nbsp;,&nbsp;Text(&nbsp;value.toString()&nbsp;))<br />
</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;main(args):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;JobConf(tMap)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setJobName(</span><span style="color: #800000;">"</span><span style="color: #800000;">wordcount</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setMapperClass(&nbsp;tMap&nbsp;)</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.set(</span><span style="color: #800000;">"</span><span style="color: #800000;">mapred.join.expr</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;CompositeInputFormat.compose(</span><span style="color: #800000;">"</span><span style="color: #800000;">override</span><span style="color: #800000;">"</span><span style="color: #000000;">,TextInputFormat,&nbsp;args[</span><span style="color: #000000;">1</span><span style="color: #000000;">:</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;)&nbsp;)</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputKeyClass(&nbsp;Text&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputValueClass(&nbsp;Text&nbsp;)</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setInputFormat(CompositeInputFormat)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputPath(Path(args[</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]))<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JobClient.runJob(conf)<br />
<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__name__</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">__main__</span><span style="color: #800000;">"</span><span style="color: #000000;">:main(sys.argv)<br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
</span></div>
<br />
运行结果 (&nbsp; ) :<br />
./compile test file:///home/xx/del/jobs/tools/hadoop-0.18.3/data/090907/1 file:///home/xx/del/jobs/tools/hadoop-0.18.3/data/090907/2&nbsp;&nbsp; file:///home/xx/del/jobs/tools/hadoop-0.18.3/tmp/wc79<br />
[xx@localhost wc78]$ cat ../wc79/part-00000 <br />
0&nbsp;&nbsp; &nbsp;2<br />
2&nbsp;&nbsp; &nbsp;4<br />
4&nbsp;&nbsp; &nbsp;3<br />
6&nbsp;&nbsp; &nbsp;1<br />
8&nbsp;&nbsp; &nbsp;5<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/294261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-09-08 10:39 <a href="http://www.blogjava.net/Skynet/archive/2009/09/08/294261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hadoop jython ( windows )</title><link>http://www.blogjava.net/Skynet/archive/2009/09/04/293914.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Fri, 04 Sep 2009 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/09/04/293914.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/293914.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/09/04/293914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/293914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/293914.html</trackback:ping><description><![CDATA[参考 ： <a id="viewpost1_TitleUrl" href="../../Skynet/archive/2009/07/08/285919.html">hadoop window  搭建</a> 后,由于对 py 的语法喜欢 ，一直想 把hadoop,改成jython 的 <br />
这次 在 自己电脑上&nbsp; 终于 完成,下面介绍过程:<br />
<br />
测试环境：<br />
依然的 windows + cygwin <br />
hadoop 0.18&nbsp; # C:/cygwin/home/lky/tools/java/hadoop-0.18.3<br />
jython 2.2.1 # C:/jython2.2.1<br />
<br />
参考: <a title="Click to do a full-text search for this title" href="http://wiki.apache.org/hadoop/PythonWordCount?action=fullsearch&amp;value=linkto%3A%22PythonWordCount%22&amp;context=180">PythonWordCount</a><br />
<br />
启动 hadoop 并到 hdoop_home 下<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);"><strong># 在云环境中创建 input 目录</strong><br />
$&gt;bin/hadoop&nbsp;dfs -mkdir input</span><br />
<strong># 在 包 hadoop 的 NOTICE.txt 拷贝到 input 目录下</strong><br />
<span style="color: rgb(0, 0, 0);">$&gt;bin/hadoop&nbsp;dfs&nbsp;-copyFromLocal&nbsp;c:/cygwin/home/lky/tools/java/hadoop-0.18.3/NOTICE.txt&nbsp; hdfs:///user/lky/input<br />
<br />
$&gt;cd </span>src/examples/python<br />
<br />
<strong># 创建 个 脚本 ( jy-&gt;jar-&gt;hd run&nbsp; ) 一步完成!<br />
# 当然 在 linux 写个脚本比这 好看 呵呵！<br />
</strong>$&gt;vim run.bat<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">C:\Program&nbsp;Files\Java\jdk1.6.0_11\bin\java.exe</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;-classpath&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">C:\jython2.2.1\jython.jar;%CLASSPATH%</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;org.python.util.jython&nbsp;C:\jython2</span><span style="color: rgb(0, 0, 0);">.2.1</span><span style="color: rgb(0, 0, 0);">\Tools\jythonc\jythonc.py&nbsp;&nbsp;&nbsp;-p&nbsp;org.apache.hadoop.examples&nbsp;-d&nbsp;-j&nbsp;wc.jar&nbsp;-c&nbsp;%</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
<br />
<strong>sh&nbsp;</strong>C:\cygwin\home\lky\tools\java\hadoop-</span><span style="color: rgb(0, 0, 0);">0.18.3</span><span style="color: rgb(0, 0, 0);">\bin\hadoop&nbsp;jar&nbsp;wc.jar&nbsp;&nbsp;%</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">&nbsp;%</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">&nbsp;%</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">&nbsp;%</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">&nbsp;%</span><span style="color: rgb(0, 0, 0);">6</span><span style="color: rgb(0, 0, 0);">&nbsp;%</span><span style="color: rgb(0, 0, 0);">7</span><span style="color: rgb(0, 0, 0);">&nbsp;%</span><span style="color: rgb(0, 0, 0);">8</span><span style="color: rgb(0, 0, 0);">&nbsp;%</span><span style="color: rgb(0, 0, 0);">9</span><span style="color: rgb(0, 0, 0);"> <br />
</span></div>
<br />
<strong># 修改 jythonc 打包 环境 。 +hadoop jar </strong><br />
$&gt;vim C:\jython2.2.1\Tools\jythonc\jythonc.py<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Copyright&nbsp;(c)&nbsp;Corporation&nbsp;for&nbsp;National&nbsp;Research&nbsp;Initiatives</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Driver&nbsp;script&nbsp;for&nbsp;jythonc2.&nbsp;&nbsp;See&nbsp;module&nbsp;main.py&nbsp;for&nbsp;details</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;sys,os,glob<br />
<strong><br />
</strong>
</span><strong><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;fn&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;glob.glob(</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">c:/cygwin/home/lky/tools/java/hadoop-0.18.3/*.jar</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)&nbsp;:sys.path.append(fn)<br />
</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;fn&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;glob.glob(</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">c:/jython2.2.1/*.jar</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)&nbsp;:sys.path.append(fn)<br />
</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;fn&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;glob.glob(</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">c:/cygwin/home/lky/tools/java/hadoop-0.18.3/lib/*.jar</span><span style="color: rgb(128, 0, 0);">'</span></strong><span style="color: rgb(0, 0, 0);"><strong>)&nbsp;:sys.path.append(fn)<br />
</strong>
<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;main<br />
main.main()<br />
<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;os<br />
os._exit(0)<br />
</span></div>
<br />
<br />
<strong># 运行</strong><br />
C:/cygwin/home/lky/tools/java/hadoop-0.18.3/src/examples/python&gt;<br />
&nbsp; run.bat WordCount.py&nbsp; hdfs:///user/lky/input&nbsp; file:///c:/cygwin/home/lky/tools/java/hadoop-0.18.3/tmp2<br />
<br />
<br />
</div>
<strong><br />
<br />
结果输出：</strong><br />
cat c:/cygwin/home/lky/tools/java/hadoop-0.18.3/tmp2/part-00000<br />
(http://www.apache.org/).&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
Apache&nbsp; 1<br />
Foundation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
Software&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
The&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
This&nbsp;&nbsp;&nbsp; 1<br />
by&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
developed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
includes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
product 1<br />
software&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
<br />
<strong>下面重头来了 ：（简洁的 jy hdoop 代码）</strong><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">#<br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;Licensed&nbsp;to&nbsp;the&nbsp;Apache&nbsp;Software&nbsp;Foundation&nbsp;(ASF)&nbsp;under&nbsp;one</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;or&nbsp;more&nbsp;contributor&nbsp;license&nbsp;agreements.&nbsp;&nbsp;See&nbsp;the&nbsp;NOTICE&nbsp;file</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;distributed&nbsp;with&nbsp;this&nbsp;work&nbsp;for&nbsp;additional&nbsp;information</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;regarding&nbsp;copyright&nbsp;ownership.&nbsp;&nbsp;The&nbsp;ASF&nbsp;licenses&nbsp;this&nbsp;file</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;to&nbsp;you&nbsp;under&nbsp;the&nbsp;Apache&nbsp;License,&nbsp;Version&nbsp;2.0&nbsp;(the</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;"License");&nbsp;you&nbsp;may&nbsp;not&nbsp;use&nbsp;this&nbsp;file&nbsp;except&nbsp;in&nbsp;compliance</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;with&nbsp;the&nbsp;License.&nbsp;&nbsp;You&nbsp;may&nbsp;obtain&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;License&nbsp;at</span><span style="color: rgb(0, 128, 0);"><br />
#<br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.apache.org/licenses/LICENSE-2.0</span><span style="color: rgb(0, 128, 0);"><br />
#<br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;Unless&nbsp;required&nbsp;by&nbsp;applicable&nbsp;law&nbsp;or&nbsp;agreed&nbsp;to&nbsp;in&nbsp;writing,&nbsp;software</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;distributed&nbsp;under&nbsp;the&nbsp;License&nbsp;is&nbsp;distributed&nbsp;on&nbsp;an&nbsp;"AS&nbsp;IS"&nbsp;BASIS,</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;WITHOUT&nbsp;WARRANTIES&nbsp;OR&nbsp;CONDITIONS&nbsp;OF&nbsp;ANY&nbsp;KIND,&nbsp;either&nbsp;express&nbsp;or&nbsp;implied.</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;See&nbsp;the&nbsp;License&nbsp;for&nbsp;the&nbsp;specific&nbsp;language&nbsp;governing&nbsp;permissions&nbsp;and</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;limitations&nbsp;under&nbsp;the&nbsp;License.</span><span style="color: rgb(0, 128, 0);"><br />
#<br />
</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);">&nbsp;org.apache.hadoop.fs&nbsp;</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;Path<br />
</span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);">&nbsp;org.apache.hadoop.io&nbsp;</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);">&nbsp;org.apache.hadoop.mapred&nbsp;</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;sys<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;getopt<br />
<br />
</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;WordCountMap(Mapper,&nbsp;MapReduceBase):<br />
&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;IntWritable(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;map(self,&nbsp;key,&nbsp;value,&nbsp;output,&nbsp;reporter):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;w&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;value.toString().split():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.collect(Text(w),&nbsp;self.one)<br />
<br />
</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Summer(Reducer,&nbsp;MapReduceBase):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;reduce(self,&nbsp;key,&nbsp;values,&nbsp;output,&nbsp;reporter):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;values.hasNext():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">&nbsp;values.next().get()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.collect(key,&nbsp;IntWritable(sum))<br />
<br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;printUsage(code):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">wordcount&nbsp;[-m&nbsp;&lt;maps&gt;]&nbsp;[-r&nbsp;&lt;reduces&gt;]&nbsp;&lt;input&gt;&nbsp;&lt;output&gt;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(code)<br />
<br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;main(args):<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;JobConf(WordCountMap);<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf.setJobName(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">wordcount</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputKeyClass(Text);<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputValueClass(IntWritable);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf.setMapperClass(WordCountMap);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf.setCombinerClass(Summer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf.setReducerClass(Summer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flags,&nbsp;other_args&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;getopt.getopt(args[</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">:],&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">m:r:</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">except</span><span style="color: rgb(0, 0, 0);">&nbsp;getopt.GetoptError:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUsage(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;len(other_args)&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printUsage(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;f,v&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;flags:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;f&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">-m</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setNumMapTasks(int(v))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">elif</span><span style="color: rgb(0, 0, 0);">&nbsp;f&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">-r</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setNumReduceTasks(int(v))<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf.setInputPath(Path(other_args[0]))<br />
&nbsp;&nbsp;&nbsp;&nbsp;conf.setOutputPath(Path(other_args[</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]))<br />
&nbsp;&nbsp;&nbsp;&nbsp;JobClient.runJob(conf);<br />
<br />
</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 128);">__name__</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">__main__</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;main(sys.argv)<br />
</span></div>
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/293914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-09-04 17:14 <a href="http://www.blogjava.net/Skynet/archive/2009/09/04/293914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apriori 算法（py）</title><link>http://www.blogjava.net/Skynet/archive/2009/08/31/293309.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Mon, 31 Aug 2009 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/08/31/293309.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/293309.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/08/31/293309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/293309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/293309.html</trackback:ping><description><![CDATA[<br />
<br />
代码:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;-*-&nbsp;coding:&nbsp;UTF8&nbsp;-*-</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;sys<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;最小&nbsp;支持度</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">sup_min&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;int(sys.argv[</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">])<br />
<br />
ss&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">,</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;交易&nbsp;数据&nbsp;库</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">D</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">[<br />
&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">A,B,C,D</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,<br />
&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">B,C,E</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,<br />
&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">A,B,C,E</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,<br />
&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">B,D,E</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">,<br />
&nbsp;</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">A,B,C,D</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);"><br />
]<br />
<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">交易数据库展现</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;arr&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;D&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;arr<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);"><br />
<br />
<br />
</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(128, 0, 0);">'''</span><span style="color: rgb(128, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">rows</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">int(sys.argv[</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">])</span><br />
<span style="color: rgb(128, 0, 0);">D=[]<br />
for&nbsp;tid&nbsp;in&nbsp;open('BuyMusic.20090722.mob.prodIds').readlines()[:rows]&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;D.append(tid.split("\n")[0].split("\t")[1])<br />
<br />
<br />
print&nbsp;"读取&nbsp;文件结束&nbsp;BuyMusic.20090722.mob.prodIds&nbsp;!"<br />
</span><span style="color: rgb(128, 0, 0);">'''</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">全局&nbsp;频繁项&nbsp;收集</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">sup_data_map&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;{}<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">全局&nbsp;&nbsp;最大频繁项&nbsp;收集</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">is_zsup</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">{}<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;遍历过程&nbsp;临时&nbsp;局部&nbsp;&nbsp;频繁项&nbsp;收集</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">mapL&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;{}<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;第一次&nbsp;频繁项&nbsp;收集</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;find_frequent_1_itemset(I):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;I</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(128, 0, 0);">null</span><span style="color: rgb(128, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">or</span><span style="color: rgb(0, 0, 0);">&nbsp;I</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(128, 0, 0);">''</span><span style="color: rgb(0, 0, 0);">&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL.has_key(I):&nbsp;mapL[I]</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">:&nbsp;mapL[I]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
<br />
map(find_frequent_1_itemset,[&nbsp;I&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;TID&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;D&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;I&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;TID.split(ss)&nbsp;])<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;刷选掉&nbsp;小于&nbsp;最小支持度&nbsp;的&nbsp;频繁项</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;remove_not_sup_min(map,supmin</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">sup_min):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;[k&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k,v&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;map.items()&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;v</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">supmin]&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">del</span><span style="color: rgb(0, 0, 0);">&nbsp;map[k]<br />
remove_not_sup_min(mapL)<br />
<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">第一次&nbsp;筛选&nbsp;频繁项&nbsp;结束!</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;装载&nbsp;全局&nbsp;频繁项&nbsp;最大频繁项</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k,v&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL.items()&nbsp;:&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;sup_data_map[k]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">v<br />
&nbsp;&nbsp;&nbsp;&nbsp;is_zsup[k]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">v<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;判定&nbsp;是否&nbsp;'BD'&nbsp;属于&nbsp;&nbsp;'BCD'&nbsp;中&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">isInTid&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">lambda</span><span style="color: rgb(0, 0, 0);">&nbsp;I,TID&nbsp;:&nbsp;len(I.split(ss))&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;len([i&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;I&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;TID.split(ss)])<br />
<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;组合&nbsp;&nbsp;[A,B]&nbsp;+&nbsp;[A,C]&nbsp;=&nbsp;[A,B.C]</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;comb(arr1,arr2):<br />
&nbsp;&nbsp;&nbsp;&nbsp;tmap</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">{}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;v&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;arr1</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">arr2&nbsp;:&nbsp;tmap[v]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;tmap.keys()<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;apriori&nbsp;迭代核心</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;runL(mapL,dep):<br />
&nbsp;&nbsp;&nbsp;&nbsp;mapL2&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;{}<br />
&nbsp;&nbsp;&nbsp;&nbsp;C</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">{}<br />
&nbsp;&nbsp;&nbsp;&nbsp;keys&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL.keys()<br />
&nbsp;&nbsp;&nbsp;&nbsp;iik</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">""</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;jjk</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">""</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;根据&nbsp;上次&nbsp;&nbsp;频繁项&nbsp;，生成本次&nbsp;'可能频繁项'&nbsp;集合&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;ii&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;range(len(keys))&nbsp;:&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;jj&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;range(ii</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,len(keys))&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keystr</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">comb([ch&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;ch&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;keys[ii].split(ss)],[ch&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;ch&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;keys[jj].split(ss)])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">not</span><span style="color: rgb(0, 0, 0);">&nbsp;len(keystr)&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;dep&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">continue</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keystr.sort()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tk</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">ss.join(keystr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">not</span><span style="color: rgb(0, 0, 0);">&nbsp;tk&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;C&nbsp;:&nbsp;C[tk]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">(keys[ii],keys[jj])<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;'可能频繁项'&nbsp;对比&nbsp;交易数据库&nbsp;&nbsp;计数</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;tk,z&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;C.items():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;TID&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;D:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;isInTid(tk,TID)&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL2.has_key(tk):&nbsp;mapL2[tk]</span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">:&nbsp;mapL2[tk]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;刷选掉&nbsp;小于&nbsp;最小支持度&nbsp;的&nbsp;频繁项</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;remove_not_sup_min(mapL2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k,v&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;is_zsup.items()&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k1,v1&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL2.items()&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;isInTid(k,k1)&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">del</span><span style="color: rgb(0, 0, 0);">&nbsp;is_zsup[k]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;全局&nbsp;频繁项&nbsp;,最大频繁项&nbsp;&nbsp;收集&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k,v&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL2.items()&nbsp;:&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sup_data_map[k]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">v<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is_zsup[k]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">v<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">第</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">str(dep)</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">次&nbsp;筛选&nbsp;频繁项&nbsp;结束!</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL2<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;真正&nbsp;运行&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">ii</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">ii</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;mapL&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;runL(mapL,ii)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;mapL<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;全局&nbsp;&nbsp;频繁项&nbsp;中&nbsp;去除&nbsp;最大频繁项</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k,v&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;is_zsup.items()&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;sup_data_map.has_key(k)&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">del</span><span style="color: rgb(0, 0, 0);">&nbsp;sup_data_map[k]<br />
<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">频繁项</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;sup_data_map<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">最大频繁项</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;is_zsup<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">可信度&nbsp;展现</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k,v&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;sup_data_map.items()&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;k1,v1&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;is_zsup.items()&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;isInTid(k,k1)&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;k,</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">-&gt;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,k1,</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">\t%.1f</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">%</span><span style="color: rgb(0, 0, 0);">((float(is_zsup[k1])</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">float(sup_data_map[k]))</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">%</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
</span></div>
<br />
<br />
<br />
<br />
结果:<br />
-bash-3.00$ python ap.py 2<br />
交易数据库展现<br />
A,B,C,D<br />
B,C,E<br />
A,B,C,E<br />
B,D,E<br />
A,B,C,D<br />
<br />
第一次 筛选 频繁项 结束!<br />
{'A': 3, 'C': 4, 'B': 5, 'E': 3, 'D': 3}<br />
第2次 筛选 频繁项 结束!<br />
{'C,D': 2, 'C,E': 2, 'A,D': 2, 'A,B': 3, 'A,C': 3, 'B,E': 3, 'B,D': 3, 'B,C': 4}<br />
第3次 筛选 频繁项 结束!<br />
{'A,B,D': 2, 'A,B,C': 3, 'B,C,D': 2, 'B,C,E': 2, 'A,C,D': 2}<br />
第4次 筛选 频繁项 结束!<br />
{'A,B,C,D': 2}<br />
第5次 筛选 频繁项 结束!<br />
{}<br />
频繁项<br />
{'A': 3, 'C': 4, 'B': 5, 'E': 3, 'D': 3, 'C,D': 2, 'C,E': 2, 'A,D': 2, 'A,B': 3, 'A,C': 3, 'A,B,D': 2, 'B,C,D': 2, 'A,C,D': 2, 'B,E': 3, 'B,D': 3, 'B,C': 4, 'A,B,C': 3}<br />
<br />
最大频繁项<br />
{'B,C,E': 2, 'A,B,C,D': 2}<br />
<br />
可信度 展现<br />
A -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;66.7%<br />
C -&gt; B,C,E &nbsp;&nbsp; &nbsp;50.0%<br />
C -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;50.0%<br />
B -&gt; B,C,E &nbsp;&nbsp; &nbsp;40.0%<br />
B -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;40.0%<br />
E -&gt; B,C,E &nbsp;&nbsp; &nbsp;66.7%<br />
D -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;66.7%<br />
C,D -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;100.0%<br />
C,E -&gt; B,C,E &nbsp;&nbsp; &nbsp;100.0%<br />
A,D -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;100.0%<br />
A,B -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;66.7%<br />
A,C -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;66.7%<br />
A,B,D -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;100.0%<br />
B,C,D -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;100.0%<br />
A,C,D -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;100.0%<br />
B,E -&gt; B,C,E &nbsp;&nbsp; &nbsp;66.7%<br />
B,D -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;66.7%<br />
B,C -&gt; B,C,E &nbsp;&nbsp; &nbsp;50.0%<br />
B,C -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;50.0%<br />
A,B,C -&gt; A,B,C,D &nbsp;&nbsp; &nbsp;66.7%<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/293309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-08-31 14:25 <a href="http://www.blogjava.net/Skynet/archive/2009/08/31/293309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Berkeley DB  python btree</title><link>http://www.blogjava.net/Skynet/archive/2009/08/20/291917.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Thu, 20 Aug 2009 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/08/20/291917.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/291917.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/08/20/291917.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/291917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/291917.html</trackback:ping><description><![CDATA[<br />
当熟悉 hash db&nbsp;&nbsp; <a id="viewpost1_TitleUrl" href="../../Skynet/archive/2009/06/16/282726.html">python bsddb （db-key 转）</a><br />
使用确实很方便，但是没有 想 关系数据库中的 select order by 查询 ，感觉比较郁闷! 上网 一顿 google ......<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;bsddb<br />
db&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;bsddb.btopen(</span><span style="color: #800000;">'</span><span style="color: #800000;">/tmp/spam.db</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">c</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;range(</span><span style="color: #000000;">10</span><span style="color: #000000;">):&nbsp;db[</span><span style="color: #800000;">'</span><span style="color: #800000;">%d</span><span style="color: #800000;">'</span><span style="color: #000000;">%</span><span style="color: #000000;">i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">%d</span><span style="color: #800000;">'</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(i</span><span style="color: #000000;">*</span><span style="color: #000000;">i)<br />
<br />
db[</span><span style="color: #800000;">'</span><span style="color: #800000;">3</span><span style="color: #800000;">'</span><span style="color: #000000;">]&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;9&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">db.keys()&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;['0',&nbsp;'1',&nbsp;'2',&nbsp;'3',&nbsp;'4',&nbsp;'5',&nbsp;'6',&nbsp;'7',&nbsp;'8',&nbsp;'9']</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
db.set_location(</span><span style="color: #800000;">'</span><span style="color: #800000;">6</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;36&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">db.previous()&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;25&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">db.next()&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;36</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">db.next()&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;47</span><span style="color: #008000;"><br />
</span></div>
<br />
<br />
这可以定位，并且 previous , next 什么的 （不过目前好像是针对 string 自然 排序！）<br />
这里比较实用的 demo<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;bsddb<br />
db&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;bsddb.btopen(</span><span style="color: #800000;">'</span><span style="color: #800000;">/tmp/spam2.db</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">c</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
db[</span><span style="color: #800000;">"</span><span style="color: #800000;">2009-08-14&nbsp;22:00</span><span style="color: #800000;">"</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">gg</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
db[</span><span style="color: #800000;">"</span><span style="color: #800000;">2009-08-15&nbsp;22:00</span><span style="color: #800000;">"</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">cc</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
db[</span><span style="color: #800000;">"</span><span style="color: #800000;">2009-07-15&nbsp;00:00</span><span style="color: #800000;">"</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">tt</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
db[</span><span style="color: #800000;">"</span><span style="color: #800000;">2009-08-16&nbsp;22:00</span><span style="color: #800000;">"</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">gg</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;注意&nbsp;这&nbsp;统配&nbsp;等价&nbsp;正则&nbsp;=&nbsp;2009-08-15.*&nbsp;&nbsp;</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">&nbsp;开始&nbsp;以为能使用&nbsp;正则&nbsp;，但不能&nbsp;。只能简单的&nbsp;xxx.*&nbsp;形式的</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">db.set_location(</span><span style="color: #800000;">'</span><span style="color: #800000;">2009-08-15</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;('2009-08-15&nbsp;22:00',&nbsp;'cc')</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">db.next()&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;('2009-08-16&nbsp;22:00',&nbsp;'gg')</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
db.set_location(</span><span style="color: #800000;">'</span><span style="color: #800000;">2009-08-15</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;('2009-08-15&nbsp;22:00',&nbsp;'cc')</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">db.previous()&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">('2009-08-14&nbsp;22:00',&nbsp;'gg')</span><span style="color: #008000;"><br />
</span></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/291917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-08-20 10:52 <a href="http://www.blogjava.net/Skynet/archive/2009/08/20/291917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>k-means （python）算法 </title><link>http://www.blogjava.net/Skynet/archive/2009/08/07/290242.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Fri, 07 Aug 2009 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/08/07/290242.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/290242.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/08/07/290242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/290242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/290242.html</trackback:ping><description><![CDATA[<br />
转:http://www.daniweb.com/forums/thread31449.html<br />
什么都不说了，直接看代码吧。<br />
注解 应该写的比较详细<br />
<br />
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);"># liukaiyi&nbsp;</span><span style="color: rgb(0, 128, 0);"> <br />
# 注&nbsp;k-means&nbsp;，维度类型&nbsp;-&nbsp;数值形式&nbsp;(&nbsp;199&nbsp;或&nbsp;23.13&nbsp;<img src="http://www.blogjava.net/Images/dot.gif" alt="" />)&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;sys,&nbsp;math,&nbsp;random<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;类化&nbsp;'数据'&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;在&nbsp;n-维度空间</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Point:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 128);">__init__</span><span style="color: rgb(0, 0, 0);">(self,&nbsp;coords,&nbsp;reference</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.coords&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;coords<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.n&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;len(coords)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.reference&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;reference<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 128);">__repr__</span><span style="color: rgb(0, 0, 0);">(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;str(self.coords)<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;类化&nbsp;'聚集点&nbsp;/&nbsp;聚类平均距离&nbsp;点&nbsp;'&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;在&nbsp;n-维度空间</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;k-means&nbsp;核心类</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;每次&nbsp;聚集各点&nbsp;围绕她&nbsp;进行聚集&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;并提供方法&nbsp;求-聚集后的计算中心点，同时记入&nbsp;此次&nbsp;中心点(聚集各点平均距离)，为下一次聚集提供中心点.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Cluster:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 128);">__init__</span><span style="color: rgb(0, 0, 0);">(self,&nbsp;points):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;len(points)&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;0:&nbsp;</span><span style="color: rgb(0, 0, 255);">raise</span><span style="color: rgb(0, 0, 0);">&nbsp;Exception(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">ILLEGAL:&nbsp;EMPTY&nbsp;CLUSTER</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.points&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;points<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.n&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;points[0].n<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;p&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;points:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;p.n&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;self.n:&nbsp;</span><span style="color: rgb(0, 0, 255);">raise</span><span style="color: rgb(0, 0, 0);">&nbsp;Exception(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">ILLEGAL:&nbsp;MULTISPACE&nbsp;CLUSTER</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;求&nbsp;聚集各点后&nbsp;平均点</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;self.centroid&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;self.calculateCentroid()<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 128);">__repr__</span><span style="color: rgb(0, 0, 0);">(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;str(self.points)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;更新&nbsp;中心点，并返回&nbsp;原中心点&nbsp;与&nbsp;现中心点(聚集各点平均距离)距离&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;update(self,&nbsp;points):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old_centroid&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;self.centroid<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.points&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;points<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.centroid&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;self.calculateCentroid()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;getDistance(old_centroid,&nbsp;self.centroid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;计算平均点&nbsp;（聚集/收集各点（离本类的中心点）最近数据,后生成新的&nbsp;中心点&nbsp;）</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;calculateCentroid(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centroid_coords&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;维度&nbsp;迭代</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;range(self.n):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centroid_coords.append(</span><span style="color: rgb(0, 0, 0);">0.0</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;收集各点&nbsp;迭代&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;p&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;self.points:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centroid_coords[i]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;centroid_coords[i]</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">p.coords[i]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centroid_coords[i]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;centroid_coords[i]</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">len(self.points)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;Point(centroid_coords)<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;返回根据&nbsp;k-means&nbsp;聚集形成的&nbsp;数据集&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;kmeans(points,&nbsp;k,&nbsp;cutoff):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Randomly&nbsp;sample&nbsp;k&nbsp;Points&nbsp;from&nbsp;the&nbsp;points&nbsp;list,&nbsp;build&nbsp;Clusters&nbsp;around&nbsp;them</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;initial&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;random.sample(points,&nbsp;k)<br />
&nbsp;&nbsp;&nbsp;&nbsp;clusters&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;p&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;initial:&nbsp;clusters.append(Cluster([p]))<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;迭代&nbsp;k-means&nbsp;直到&nbsp;每次迭代&nbsp;各收集点&nbsp;别的&nbsp;最多&nbsp;不超过&nbsp;0.5&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;True:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;k&nbsp;个收集&nbsp;数组</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lists&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;c&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;clusters:&nbsp;lists.append([])<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;迭代&nbsp;每个&nbsp;数据点&nbsp;，并计算与每个中心点距离</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;并把数据点添加入相应最短的中心点收集数组中</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;在迭代中&nbsp;smallest_distance&nbsp;为每个点与各中心点最短距离&nbsp;参数，请注意看</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;p&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;points:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smallest_distance&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;getDistance(p,&nbsp;clusters[0].centroid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;range(len(clusters[</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">:])):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;distance&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;getDistance(p,&nbsp;clusters[i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">].centroid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;distance&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;smallest_distance:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smallest_distance&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;distance<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;添加到&nbsp;离最短中心距离的&nbsp;数组中</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lists[index].append(p)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;聚集完，计算新&nbsp;中心点</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;并&nbsp;cluster.centroid&nbsp;属性记入下&nbsp;新中心点（下一次&nbsp;聚集的中心点&nbsp;）</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;并&nbsp;计算与上一次&nbsp;中心点&nbsp;距离&nbsp;，如果&nbsp;差值在&nbsp;cutoff&nbsp;0.5&nbsp;以下&nbsp;,跳出迭代&nbsp;（结束，返回最后一次&nbsp;聚集集合）</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;biggest_shift&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0.0</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;range(len(clusters)):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shift&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;clusters[i].update(lists[i])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;biggest_shift&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;max(biggest_shift,&nbsp;shift)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;biggest_shift&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;cutoff:&nbsp;</span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;clusters<br />
<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;得到欧几里德距离两点之间&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;getDistance(a,&nbsp;b):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Forbid&nbsp;measurements&nbsp;between&nbsp;Points&nbsp;in&nbsp;different&nbsp;spaces</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;a.n&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;b.n:&nbsp;</span><span style="color: rgb(0, 0, 255);">raise</span><span style="color: rgb(0, 0, 0);">&nbsp;Exception(</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">ILLEGAL:&nbsp;NON-COMPARABLE&nbsp;POINTS</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;Euclidean&nbsp;distance&nbsp;between&nbsp;a&nbsp;and&nbsp;b&nbsp;is&nbsp;sqrt(sum((a[i]-b[i])^2)&nbsp;for&nbsp;all&nbsp;i)</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0.0</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;range(a.n):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;ret</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">pow((a.coords[i]</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">b.coords[i]),&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;math.sqrt(ret)<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;在&nbsp;n-维度&nbsp;空间中创建&nbsp;随机点</span><span style="color: rgb(0, 128, 0);"><br />
#</span><span style="color: rgb(0, 128, 0);">&nbsp;--&nbsp;随机生成&nbsp;测试数据</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;makeRandomPoint(n,&nbsp;lower,&nbsp;upper):<br />
&nbsp;&nbsp;&nbsp;&nbsp;coords&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;range(n):&nbsp;coords.append(random.uniform(lower,&nbsp;upper))<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;Point(coords)<br />
<br />
</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;main&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">def</span><span style="color: rgb(0, 0, 0);">&nbsp;main(args):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;参数说明</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;num_points,&nbsp;&nbsp;&nbsp;&nbsp;n,&nbsp;&nbsp;&nbsp;&nbsp;k,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cutoff,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lower,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upper&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;随机数据数量&nbsp;,&nbsp;维度,&nbsp;聚集数,&nbsp;跳出迭代最小距离&nbsp;,&nbsp;&nbsp;&nbsp;维度数最大值,维度数最小值</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;num_points,&nbsp;n,&nbsp;k,&nbsp;cutoff,&nbsp;lower,&nbsp;upper&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">0.5</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">200</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">200</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;在&nbsp;n-维度空间里&nbsp;,&nbsp;创建&nbsp;num_points&nbsp;随机点</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;测试数据生成&nbsp;</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;points&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;range(num_points):&nbsp;points.append(makeRandomPoint(n,&nbsp;lower,&nbsp;upper))<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">#</span><span style="color: rgb(0, 128, 0);">&nbsp;使用&nbsp;k-means&nbsp;算法，来&nbsp;聚集数据点&nbsp;(算法入口点)</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;clusters&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;kmeans(points,&nbsp;k,&nbsp;cutoff)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">\nPOINTS:</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;p&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;points:&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">P:</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;p<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">\nCLUSTERS:</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;c&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;clusters:&nbsp;</span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">C:</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;c<br />
</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 128);">__name__</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">__main__</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:&nbsp;main(sys.argv)<br />
</span></div>
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/290242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-08-07 16:20 <a href="http://www.blogjava.net/Skynet/archive/2009/08/07/290242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python ftp (转)</title><link>http://www.blogjava.net/Skynet/archive/2009/07/10/286220.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Fri, 10 Jul 2009 04:14:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/07/10/286220.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/286220.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/07/10/286220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/286220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/286220.html</trackback:ping><description><![CDATA[<br />
<br />
f<span class="Apple-style-span" style="word-spacing: 0px; font: 16px Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; color: rgb(102,102,102); line-height: 20px; font-family: verdana; text-align: left"><font size="2">tplib模块定义了FTP类和一些方法，用以进行客户端的ftp编程。可以用python编写一个自已的ftp客户端程序，用于下载文件或镜像站点。如果想了解ftp协议的详细内容，请参考RFC959。<br />
<br />
该模块是python的通用模块，所以默认应该已安装。ftplib模块使用很简单，暂时只有一个FTP类和十几个函数。</font>
<div class="entry-more" id="more">
<p style="font-size: 12px; line-height: 20px; font-family: verdana"><font size="2">下面用一个交互方式演示一下ftplib的主要功能。<span class="Apple-style-span" style="word-spacing: 0px; font: 16px Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-family: -webkit-sans-serif"></p>
<pre style="padding-right: 5px; border-top: rgb(170,204,153) 1px solid; overflow-y: auto; padding-left: 5px; overflow-x: auto; padding-bottom: 5px; color: rgb(51,51,51); line-height: 15px; padding-top: 5px; border-bottom: rgb(170,204,153) 1px solid; border-right-style: none; border-left-style: none; background-color: rgb(238,255,204)"><span class="gp" style="font-weight: bold; color: rgb(198,93,9)">&gt;&gt;&gt; </span><span class="kn" style="font-weight: bold; color: rgb(0,112,32)">from</span> <span class="nn" style="font-weight: bold; color: rgb(14,132,181)">ftplib</span> <span class="kn" style="font-weight: bold; color: rgb(0,112,32)">import</span> <span class="n">FTP</span>
<span class="gp" style="font-weight: bold; color: rgb(198,93,9)">&gt;&gt;&gt; </span><span class="n">ftp</span> <span class="o" style="color: rgb(102,102,102)">=</span> <span class="n">FTP</span><span class="p">(</span><span class="s" style="color: rgb(64,112,160)">'ftp.cwi.nl'</span><span class="p">)</span>   <span class="c" style="color: rgb(64,128,144); font-style: italic"># connect to host, default port</span>
<span class="gp" style="font-weight: bold; color: rgb(198,93,9)">&gt;&gt;&gt; </span><span class="n">ftp</span><span class="o" style="color: rgb(102,102,102)">.</span><span class="n">login</span><span class="p">()</span>               <span class="c" style="color: rgb(64,128,144); font-style: italic"># user anonymous, passwd anonymous@</span>
<span class="gp" style="font-weight: bold; color: rgb(198,93,9)">&gt;&gt;&gt; </span><span class="n">ftp</span><span class="o" style="color: rgb(102,102,102)">.</span><span class="n">retrlines</span><span class="p">(</span><span class="s" style="color: rgb(64,112,160)">'LIST'</span><span class="p">)</span>     <span class="c" style="color: rgb(64,128,144); font-style: italic"># list directory contents</span>
<span class="go" style="color: rgb(48,48,48)">total 24418</span>
<span class="go" style="color: rgb(48,48,48)">drwxrwsr-x   5 ftp-usr  pdmaint     1536 Mar 20 09:48 .</span>
<span class="go" style="color: rgb(48,48,48)">dr-xr-srwt 105 ftp-usr  pdmaint     1536 Mar 21 14:32 ..</span>
<span class="go" style="color: rgb(48,48,48)">-rw-r--r--   1 ftp-usr  pdmaint     5305 Mar 20 09:48 INDEX</span>
<span class="go" style="color: rgb(48,48,48)"> .</span>
<span class="go" style="color: rgb(48,48,48)"> .</span>
<span class="go" style="color: rgb(48,48,48)"> .</span>
<span class="gp" style="font-weight: bold; color: rgb(198,93,9)">&gt;&gt;&gt; </span><span class="n">ftp</span><span class="o" style="color: rgb(102,102,102)">.</span><span class="n">retrbinary</span><span class="p">(</span><span class="s" style="color: rgb(64,112,160)">'RETR README'</span><span class="p">,</span> <span class="nb" style="color: rgb(0,112,32)">open</span><span class="p">(</span><span class="s" style="color: rgb(64,112,160)">'README'</span><span class="p">,</span> <span class="s" style="color: rgb(64,112,160)">'wb'</span><span class="p">)</span><span class="o" style="color: rgb(102,102,102)">.</span><span class="n">write</span><span class="p">)</span>
<span class="go" style="color: rgb(48,48,48)">'226 Transfer complete.'</span>
<span class="gp" style="font-weight: bold; color: rgb(198,93,9)">&gt;&gt;&gt; </span><span class="n">ftp</span><span class="o" style="color: rgb(102,102,102)">.</span><span class="n">quit</span><span class="p">()</span></pre>
<p style="font-size: 12px; line-height: 20px; font-family: verdana"></span></span><br />
</font></p>
<font size="2"><br />
<div><font size="2">下面一个下载文件的示例<br />
<br />
#!/usr/bin/env python<br />
<br />
#author:Jims of<span class="Apple-converted-space">&nbsp;</span></font><a style="padding-right: 2px; padding-left: 2px; padding-bottom: 2px; color: rgb(0,66,153); padding-top: 2px; text-decoration: none" href="http://www.ringkee.com/" target="_blank"><font color="#000000" size="2">http://www.ringkee.com/</font></a><br />
<font size="2">#create date: 2005/02/05<br />
#description: Using ftplib module download a file from a ftp server.<br />
<br />
from ftplib import FTP<br />
<br />
ftp=FTP()<br />
<br />
ftp.set_debuglevel(2) #打开调试级别2，显示详细信息<br />
ftp.connect('ftp_server','port') #连接<br />
ftp.login('username','password') #登录，如果匿名登录则用空串代替即可<br />
<br />
print ftp.getwelcome() #显示ftp服务器欢迎信息<br />
ftp.cwd('xxx/xxx/') #选择操作目录<br />
bufsize = 1024 #设置缓冲块大小<br />
filename='dog.jpg'<span class="Apple-converted-space">&nbsp;</span><br />
file_handler = open(filename,'wb').write #以写模式在本地打开文件<br />
ftp.retrbinary('RETR dog.jpg',file_handler,bufsize) #接收服务器上文件并写入本地文件<br />
ftp.set_debuglevel(0) #关闭调试<br />
<br />
ftp.quit() #退出ftp服务器<br />
<br />
下面一个上传文件的示例，要成功运行该脚本，需在ftp服务器上有上传文件的权限。<br />
<br />
#!/usr/bin/env python<br />
<br />
#author:Jims of<span class="Apple-converted-space">&nbsp;</span></font><a style="padding-right: 2px; padding-left: 2px; padding-bottom: 2px; color: rgb(0,66,153); padding-top: 2px; text-decoration: none" href="http://www.ringkee.com/" target="_blank"><font color="#000000" size="2">http://www.ringkee.com/</font></a><br />
<font size="2">#create date: 2005/02/05<br />
#description: Using ftplib module upload a file to a ftp server.<br />
<br />
from ftplib import FTP<br />
<br />
ftp=FTP()<br />
<br />
ftp.set_debuglevel(2)<br />
ftp.connect('ftp_server','port')<br />
ftp.login('username','password')<br />
<br />
print ftp.getwelcome()<br />
ftp.cwd('xxx/xxx/')<br />
bufsize = 1024<br />
filename='dog.jpg'<br />
file_handler = open(filename,'rb')<br />
ftp.storbinary('STOR dog.jpg',file_handler,bufsize) #上传文件<br />
ftp.set_debuglevel(0)<br />
<br />
file_handler.close() #关闭文件<br />
ftp.quit()</font></div>
</font></div>
</span></span>
<img src ="http://www.blogjava.net/Skynet/aggbug/286220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-07-10 12:14 <a href="http://www.blogjava.net/Skynet/archive/2009/07/10/286220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python bsddb （db-key 转）</title><link>http://www.blogjava.net/Skynet/archive/2009/06/16/282726.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Tue, 16 Jun 2009 15:22:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/06/16/282726.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/282726.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/06/16/282726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/282726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/282726.html</trackback:ping><description><![CDATA[<br />
在实际中也可以 由文件导入&nbsp;db 库中&nbsp;<br />
&nbsp;&nbsp;&nbsp; awk -F: '{print $1; print $0}' &lt; /etc/passwd&nbsp;显示为:<br />
root<br />
root:x:0:0:root:/root:/bin/bash<br />
bin<br />
bin:x:1:1:bin:/bin:/sbin/nologin<br />
daemon<br />
daemon:x:2:2:daemon:/sbin:/sbin/nologin<br />
adm<br />
adm:x:3:4:adm:/var/adm:/sbin/nologin<br />
............<br />
<br />
awk -F: '{print $1; print $0}' &lt; /etc/passwd |sed 's/\\/\\\\/g'&nbsp; | db_load -T -t hash passwd.db<br />
<br />
hash 入库为&nbsp; key 为奇数行,value 为 偶数行<br />
<br />
<br />
下面转，收集<br />
<br />
<span class="Apple-style-span" style="word-spacing: 0px; font: 16px Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; line-height: 21px; font-family: verdana; text-align: left">&nbsp;&nbsp; bsddb模块是用来操作bdb的模块，bdb是著名的Berkeley DB，它的性能非常好，mysql的存储后端引擎都支持bdb的方式。这里简单介绍一些关于bsddb的使用方法。<br />
<br />
&nbsp;&nbsp;&nbsp; bdb不同于一般的关系数据库，它存储的数据只能是以key和value组成的一对数据，使用就像python的字典一样，它不能直接表示多个字段，当要存储多个字段的数据时，只能把数据作为一个整体存放到value中。<br />
使用bsddb面临的第一问题是使用什么数据访问方法，bdb支持四种：btree, hash, queue, recno。这里先说说它们有什么区别，btree是用的树结构来才存储的数据，查询速度很快，可以存储任意复杂的key和value。hash是用的hash算法，速度其实和btree比差不多的，但是当数据量特别巨大时，应该使用hash。queue是队列操作，它有一个限制，它只能存储定长的数据，也就是说value的长度是固定的！但是queue可以保持数据的先进先出，并且对数据的插入做了特殊的优化，并且提供行级锁。queue的key必须是数字。recno和queue类似，但是它可以支持变长的value，它的key同样也是数字。<br />
<br />
&nbsp;&nbsp;&nbsp; 这里先对这四种数据访问方法分别做打开数据库，简单插入一条数据的演示。<br />
对于python的bsddb模块来说，打开数据库的操作有两种方式，一是使用原始的接口，就是先打开一个环境，然后从这个环境中打开一个数据库，就像下面：<br />
<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 763px; padding-top: 4px; border-bottom: windowtext 0.5pt solid; -webkit-background-clip: initial; -webkit-background-origin: initial">
<div><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;bsddb<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />dbenv&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DBEnv()<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />dbenv.open(home,&nbsp;bsddb.db.DB_CREATE&nbsp;</span><span style="color: rgb(0,0,0)">|</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DB_INIT_MPOOL)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />d&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DB(dbenv)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />d.open(filename,&nbsp;bsddb.db.DB_BTREE,&nbsp;bsddb.db.DB_CREATE,&nbsp;</span><span style="color: rgb(0,0,0)">0666</span><span style="color: rgb(0,0,0)">)</span></div>
</div>
<br />
<br />
还有一种方式是python特有的，这个是bsddb模块本身对上面的过程做了包装，比如打开btree的：<br />
<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 763px; padding-top: 4px; border-bottom: windowtext 0.5pt solid; -webkit-background-clip: initial; -webkit-background-origin: initial">
<div><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;bsddb<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />db&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.btopen(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">test.db</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">c</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">)</span></div>
</div>
<br />
<br />
看起来比上面的简单多了吧。但这种方式提供的接口很有限，也只有很简单的功能，没有第一种的灵活，但是它在python2.5的版本里是线程安全的。这里都介绍一下。<br />
看看一个例子：<br />
&nbsp;<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 763px; padding-top: 4px; border-bottom: windowtext 0.5pt solid; -webkit-background-clip: initial; -webkit-background-origin: initial">
<div><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">-*-&nbsp;encoding:&nbsp;gb2312&nbsp;-*-</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;os,&nbsp;sys,&nbsp;string<br />
</span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;bsddb,&nbsp;time<br />
<br />
home&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">db_home</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)"><br />
filename&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">test.db</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)"><br />
</span><span style="color: rgb(0,0,255)">try</span><span style="color: rgb(0,0,0)">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;创建home目录</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;os.mkdir(home)<br />
</span><span style="color: rgb(0,0,255)">except</span><span style="color: rgb(0,0,0)">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">pass</span><span style="color: rgb(0,0,0)"><br />
<br />
</span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;创建数据库环境</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">dbenv&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DBEnv()<br />
</span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;打开数据库环境</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">dbenv.open(home,&nbsp;bsddb.db.DB_CREATE&nbsp;</span><span style="color: rgb(0,0,0)">|</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DB_INIT_MPOOL)<br />
</span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;创建数据库对象</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">d&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DB(dbenv)<br />
</span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;打开数据库,&nbsp;这里的第二个参数就是指定使用什么数据访问方法</span><span style="color: rgb(0,128,0)"><br />
#</span><span style="color: rgb(0,128,0)">&nbsp;btree是&nbsp;bsddb.db.DB_BTREE，&nbsp;hash是bsddb.db.DB_HASH</span><span style="color: rgb(0,128,0)"><br />
#</span><span style="color: rgb(0,128,0)">&nbsp;queu&nbsp;是&nbsp;bsddb.db.DB_QUEUE,&nbsp;&nbsp;recno&nbsp;是bsddb.db.DB_RECNO</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">d.open(filename,&nbsp;bsddb.db.DB_BTREE,&nbsp;bsddb.db.DB_CREATE,&nbsp;</span><span style="color: rgb(0,0,0)">0666</span><span style="color: rgb(0,0,0)">)<br />
</span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;插入一条数据，注意queue和recno的key不能是字符串的，应该是数字</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">d.put(</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">test1</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">zhaowei</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">)&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0,0,255)">print</span><span style="color: rgb(0,0,0)">&nbsp;d.items()<br />
</span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;关闭，这时会把数据写回文件</span><span style="color: rgb(0,128,0)"><br />
</span><span style="color: rgb(0,0,0)">d.close()<br />
dbenv.close()</span></div>
</div>
<br />
下面来个使用queue的，注意看有什么区别：<br />
<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 763px; padding-top: 4px; border-bottom: windowtext 0.5pt solid; -webkit-background-clip: initial; -webkit-background-origin: initial">
<div><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">-*-&nbsp;encoding:&nbsp;gb2312&nbsp;-*-</span><span style="color: rgb(0,128,0)"><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;os,&nbsp;sys,&nbsp;string<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;bsddb,&nbsp;time<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />home&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">db_home</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)"><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />filename&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">testqueue.db</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)"><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">try</span><span style="color: rgb(0,0,0)">:<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;os.mkdir(home)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">except</span><span style="color: rgb(0,0,0)">:<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">pass</span><span style="color: rgb(0,0,0)"><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />dbenv&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DBEnv()<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />dbenv.open(home,&nbsp;bsddb.db.DB_CREATE&nbsp;</span><span style="color: rgb(0,0,0)">|</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DB_INIT_MPOOL)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />d&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.db.DB(dbenv)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;queue必须要设置一个value的长度，它的value是定长的</span><span style="color: rgb(0,128,0)"><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">d.set_re_len(</span><span style="color: rgb(0,0,0)">40</span><span style="color: rgb(0,0,0)">)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />d.open(filename,&nbsp;bsddb.db.DB_QUEUE,&nbsp;bsddb.db.DB_CREATE,&nbsp;</span><span style="color: rgb(0,0,0)">0666</span><span style="color: rgb(0,0,0)">)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,128,0)">#</span><span style="color: rgb(0,128,0)">&nbsp;它的key必须是数字</span><span style="color: rgb(0,128,0)"><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,0)">d.put(</span><span style="color: rgb(0,0,0)">1</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">zhaowei</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">print</span><span style="color: rgb(0,0,0)">&nbsp;d.items()<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />d.close()<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />dbenv.close()</span></div>
</div>
<br />
那简单的第二种方式使用如下， 要简洁很多了：<br />
<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 763px; padding-top: 4px; border-bottom: windowtext 0.5pt solid; -webkit-background-clip: initial; -webkit-background-origin: initial">
<div><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0,0,255)">import</span><span style="color: rgb(0,0,0)">&nbsp;bsddb<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />d&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;bsddb.hashopen(</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">aaa.db</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">,&nbsp;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">c</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)">)<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />d[</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(128,0,0)">test1</span><span style="color: rgb(128,0,0)">'</span><span style="color: rgb(0,0,0)">]&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(128,0,0)">zhaowei</span><span style="color: rgb(128,0,0)">"</span><span style="color: rgb(0,0,0)"><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0,0,255)">print</span><span style="color: rgb(0,0,0)">&nbsp;d.items()<br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />d.close()</span></div>
</div>
<br />
</span></span>
<img src ="http://www.blogjava.net/Skynet/aggbug/282726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-06-16 23:22 <a href="http://www.blogjava.net/Skynet/archive/2009/06/16/282726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>py excel 文本化</title><link>http://www.blogjava.net/Skynet/archive/2009/06/11/281448.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Thu, 11 Jun 2009 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/06/11/281448.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/281448.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/06/11/281448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/281448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/281448.html</trackback:ping><description><![CDATA[<br />
<br />
代码上<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">#</span><span style="color: #008000">&nbsp;-*-&nbsp;coding:&nbsp;gbk&nbsp;-*-</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;对应参考excel(obj)</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提供访问excel&nbsp;参考&nbsp;sql&nbsp;访问接口</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">excelAction.py&nbsp;&nbsp;&nbsp;"G:\Documents&nbsp;and&nbsp;Settings\ch\桌面\非四大总计.xls"&nbsp;"A,C,B"&nbsp;"|"</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;pyExcelerator&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;sys<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />txls&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;parse_xls(sys.argv[</span><span style="color: #000000">1</span><span style="color: #000000">])<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />findcols</span><span style="color: #000000">=</span><span style="color: #000000">sys.argv[</span><span style="color: #000000">2</span><span style="color: #000000">].split(</span><span style="color: #800000">'</span><span style="color: #800000">,</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />tsplit</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">%s</span><span style="color: #800000">"</span><span style="color: #000000">%</span><span style="color: #000000">(sys.argv[</span><span style="color: #000000">3</span><span style="color: #000000">])<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />bmug</span><span style="color: #000000">=</span><span style="color: #0000ff">lambda</span><span style="color: #000000">&nbsp;str&nbsp;:&nbsp;unicode(str).encode(</span><span style="color: #800000">"</span><span style="color: #800000">utf8</span><span style="color: #800000">"</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;cfsize(cha):<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;len(cha)</span><span style="color: #000000">==</span><span style="color: #000000">1</span><span style="color: #000000">:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;ord(cha)</span><span style="color: #000000">-</span><span style="color: #000000">ord(</span><span style="color: #800000">'</span><span style="color: #800000">A</span><span style="color: #800000">'</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fsize</span><span style="color: #000000">=</span><span style="color: #000000">0<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fnum</span><span style="color: #000000">=</span><span style="color: #000000">cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">Z</span><span style="color: #800000">'</span><span style="color: #000000">)</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc</span><span style="color: #000000">=</span><span style="color: #000000">list(cha)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tnum&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;range(len(cc)):<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fsize</span><span style="color: #000000">+=</span><span style="color: #000000">fnum</span><span style="color: #000000">*</span><span style="color: #000000">tnum</span><span style="color: #000000">+</span><span style="color: #000000">cfsize(cc[tnum])<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;fsize<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tnum&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;range(len(txls))&nbsp;:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sheetname</span><span style="color: #000000">=</span><span style="color: #000000">txls[tnum][0]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sheetdata</span><span style="color: #000000">=</span><span style="color: #000000">txls[tnum][</span><span style="color: #000000">1</span><span style="color: #000000">]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tnum&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;range(max([tmp[0]&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tmp&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;sheetdata])):<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmp</span><span style="color: #000000">=</span><span style="color: #000000">str(tnum</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">)</span><span style="color: #000000">+</span><span style="color: #000000">tsplit<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tmp&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;findcols&nbsp;:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmp</span><span style="color: #000000">+=</span><span style="color: #000000">sheetdata[(tnum,cfsize(tmp))]</span><span style="color: #000000">+</span><span style="color: #000000">tsplit<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;stmp<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">except</span><span style="color: #000000">:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;sys.exc_info()[0]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">pass</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">except</span><span style="color: #000000">:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;sys.exc_info()[0]<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">pass</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">close</span><span style="color: #800000">'</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/Skynet/aggbug/281448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-06-11 13:18 <a href="http://www.blogjava.net/Skynet/archive/2009/06/11/281448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python  excel 操作</title><link>http://www.blogjava.net/Skynet/archive/2009/05/29/278952.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Fri, 29 May 2009 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/05/29/278952.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/278952.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/05/29/278952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/278952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/278952.html</trackback:ping><description><![CDATA[<div>参考：</div>
<div><a href="http://blog.donews.com/limodou/archive/2005/07/09/460033.aspx">http://blog.donews.com/limodou/archive/2005/07/09/460033.aspx</a></div>
<div>显示 &nbsp; 【sheet数】【sheet Name】【（第一行，第一列）】 &nbsp;</div>
<div>print sheets[0][1][(0,0)]</div>
<br />
<br />
<p>from pyExcelerator import *<br />
sheets = parse_xls('src/天娱版权明确的歌曲清单.xls')<br />
sdata=sheets[0][1]<br />
</p>
<p>#按行数&nbsp;迭代 <br />
for tnum in range(max([tmp[0] for tmp in sdata])):<br />
&nbsp;print sdata[(tnum,0)],'-',sdata[(tnum,1)]</p>
<p>&nbsp;<br />
</p>
<br />
<br />
<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;pyExcelerator&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;os<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sheets&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;parse_xls(</span><span style="color: #800000">'</span><span style="color: #800000">xls/版权确认清单表20090601.3.xls</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />cpcc</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;parse_xls(</span><span style="color: #800000">'</span><span style="color: #800000">xls/CP对应表.xls</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />g2u</span><span style="color: #000000">=</span><span style="color: #0000ff">lambda</span><span style="color: #000000">&nbsp;str&nbsp;:&nbsp;str.decode(</span><span style="color: #800000">'</span><span style="color: #800000">gbk</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />bmug</span><span style="color: #000000">=</span><span style="color: #0000ff">lambda</span><span style="color: #000000">&nbsp;str&nbsp;:&nbsp;unicode(str).encode(</span><span style="color: #800000">"</span><span style="color: #800000">gbk</span><span style="color: #800000">"</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;cfsize(cha):<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;len(cha)</span><span style="color: #000000">==</span><span style="color: #000000">1</span><span style="color: #000000">:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;ord(cha)</span><span style="color: #000000">-</span><span style="color: #000000">ord(</span><span style="color: #800000">'</span><span style="color: #800000">A</span><span style="color: #800000">'</span><span style="color: #000000">)&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;:&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fsize</span><span style="color: #000000">=</span><span style="color: #000000">0<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fnum</span><span style="color: #000000">=</span><span style="color: #000000">cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">Z</span><span style="color: #800000">'</span><span style="color: #000000">)</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc</span><span style="color: #000000">=</span><span style="color: #000000">list(cha)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tnum&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;range(len(cc)):<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fsize</span><span style="color: #000000">+=</span><span style="color: #000000">fnum</span><span style="color: #000000">*</span><span style="color: #000000">tnum</span><span style="color: #000000">+</span><span style="color: #000000">cfsize(cc[tnum])<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;fsize</span></div>
</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />cpccmap</span><span style="color: #000000">=</span><span style="color: #000000">{}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tsdata</span><span style="color: #000000">=</span><span style="color: #000000">cpcc[0][</span><span style="color: #000000">1</span><span style="color: #000000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tnum&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;range(max([tmp[0]&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tmp&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;tsdata]))[:]:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;cpname</span><span style="color: #000000">=</span><span style="color: #000000">tsdata[(tnum,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">A</span><span style="color: #800000">'</span><span style="color: #000000">))]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;cpid</span><span style="color: #000000">=</span><span style="color: #000000">(</span><span style="color: #800000">"</span><span style="color: #800000">%s</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;(tsdata[(tnum,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">B</span><span style="color: #800000">'</span><span style="color: #000000">))])).split(</span><span style="color: #800000">"</span><span style="color: #800000">.</span><span style="color: #800000">"</span><span style="color: #000000">)[0]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;cpccmap[cpname]</span><span style="color: #000000">=</span><span style="color: #000000">cpid<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">def</span><span style="color: #000000">&nbsp;insertData(cpid,cpname,&nbsp;music,actor,copyrightname,ytime,txls,rows):<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">print&nbsp;music,actor,cpname,ytime,txls,rows</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">A</span><span style="color: #800000">'</span><span style="color: #000000">),music)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">B</span><span style="color: #800000">'</span><span style="color: #000000">),actor)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">C</span><span style="color: #800000">'</span><span style="color: #000000">),cpname)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">D</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">中国大陆</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">E</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">无</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">F</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">否</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">G</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">否</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">H</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">无</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">I</span><span style="color: #800000">'</span><span style="color: #000000">),ytime.split(</span><span style="color: #800000">'</span><span style="color: #800000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #000000">)[0])<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">J</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">无</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">K</span><span style="color: #800000">'</span><span style="color: #000000">),</span><span style="color: #800000">'</span><span style="color: #800000">0</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">L</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">许可</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">M</span><span style="color: #800000">'</span><span style="color: #000000">),</span><span style="color: #800000">'</span><span style="color: #800000">200</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">N</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">许可</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">O</span><span style="color: #800000">'</span><span style="color: #000000">),</span><span style="color: #800000">'</span><span style="color: #800000">0</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">P</span><span style="color: #800000">'</span><span style="color: #000000">),u</span><span style="color: #800000">'</span><span style="color: #800000">许可</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">Q</span><span style="color: #800000">'</span><span style="color: #000000">),</span><span style="color: #800000">'</span><span style="color: #800000">0</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">U</span><span style="color: #800000">'</span><span style="color: #000000">),copyrightname)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">V</span><span style="color: #800000">'</span><span style="color: #000000">),</span><span style="color: #800000">'</span><span style="color: #800000">100%</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">W</span><span style="color: #800000">'</span><span style="color: #000000">),cpname)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;txls.write(rows,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">X</span><span style="color: #800000">'</span><span style="color: #000000">),</span><span style="color: #800000">'</span><span style="color: #800000">100%</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />cpmap</span><span style="color: #000000">=</span><span style="color: #000000">{}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tsdata&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;sheets&nbsp;:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sdata</span><span style="color: #000000">=</span><span style="color: #000000">tsdata[</span><span style="color: #000000">1</span><span style="color: #000000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">按行数&nbsp;迭代&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tnum&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;range(max([tmp[0]&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tmp&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;sdata]))[</span><span style="color: #000000">1</span><span style="color: #000000">:]:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpid</span><span style="color: #000000">=</span><span style="color: #000000">sdata[(tnum,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">C</span><span style="color: #800000">'</span><span style="color: #000000">))]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpname</span><span style="color: #000000">=</span><span style="color: #000000">sdata[(tnum,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">D</span><span style="color: #800000">'</span><span style="color: #000000">))]&nbsp;</span><span style="color: #008000">#</span><span style="color: #008000">.upper()</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;music</span><span style="color: #000000">=</span><span style="color: #000000">sdata[(tnum,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">E</span><span style="color: #800000">'</span><span style="color: #000000">))]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actor</span><span style="color: #000000">=</span><span style="color: #000000">sdata[(tnum,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">F</span><span style="color: #800000">'</span><span style="color: #000000">))]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyrightname</span><span style="color: #000000">=</span><span style="color: #000000">sdata[(tnum,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">H</span><span style="color: #800000">'</span><span style="color: #000000">))]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ytime</span><span style="color: #000000">=</span><span style="color: #000000">sdata[(tnum,cfsize(</span><span style="color: #800000">'</span><span style="color: #800000">K</span><span style="color: #800000">'</span><span style="color: #000000">))]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">not</span><span style="color: #000000">&nbsp;cpmap.has_key(cpname)&nbsp;:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpf</span><span style="color: #000000">=</span><span style="color: #000000">bmug(</span><span style="color: #800000">"</span><span style="color: #800000">cp&nbsp;-r&nbsp;0000_20090602/&nbsp;data3/</span><span style="color: #800000">"</span><span style="color: #000000">+</span><span style="color: #000000">cpid</span><span style="color: #000000">+</span><span style="color: #800000">"</span><span style="color: #800000">_20090602/&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.system(tmpf)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txls</span><span style="color: #000000">=</span><span style="color: #000000">Workbook()<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tsheet</span><span style="color: #000000">=</span><span style="color: #000000">txls.add_sheet(u</span><span style="color: #800000">'</span><span style="color: #800000">版权列表</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpmap[cpname]</span><span style="color: #000000">=</span><span style="color: #000000">[txls,</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #800000">'</span><span style="color: #800000">data3/</span><span style="color: #800000">'</span><span style="color: #000000">+</span><span style="color: #000000">cpid</span><span style="color: #000000">+</span><span style="color: #000000">u</span><span style="color: #800000">'</span><span style="color: #800000">_20090602/产品信息/</span><span style="color: #800000">'</span><span style="color: #000000">+</span><span style="color: #000000">cpid</span><span style="color: #000000">+</span><span style="color: #800000">'</span><span style="color: #800000">_20090602_01_copyright.xls</span><span style="color: #800000">'</span><span style="color: #000000">,tsheet]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;titles</span><span style="color: #000000">=</span><span style="color: #800000">'</span><span style="color: #800000">歌曲名称&nbsp;&nbsp;&nbsp;&nbsp;演唱者&nbsp;&nbsp;&nbsp;&nbsp;提供者&nbsp;&nbsp;&nbsp;&nbsp;授权区域&nbsp;&nbsp;&nbsp;&nbsp;电子化版权信息(有/无)&nbsp;&nbsp;&nbsp;&nbsp;需要DRM处理(是/否)&nbsp;&nbsp;&nbsp;&nbsp;支持二次开发(是/否)&nbsp;&nbsp;&nbsp;&nbsp;相关版权合同记录(有/无)&nbsp;&nbsp;&nbsp;&nbsp;授权期限&nbsp;&nbsp;&nbsp;&nbsp;全曲授权&nbsp;&nbsp;&nbsp;&nbsp;全曲价格&nbsp;&nbsp;&nbsp;&nbsp;彩铃授权&nbsp;&nbsp;&nbsp;&nbsp;彩铃价格&nbsp;&nbsp;&nbsp;&nbsp;IVR授权&nbsp;&nbsp;&nbsp;&nbsp;IVR价格&nbsp;&nbsp;&nbsp;&nbsp;振铃授权&nbsp;&nbsp;&nbsp;&nbsp;振铃价格&nbsp;&nbsp;&nbsp;&nbsp;ISRC&nbsp;&nbsp;&nbsp;&nbsp;UPC&nbsp;&nbsp;&nbsp;&nbsp;ICPN&nbsp;&nbsp;&nbsp;&nbsp;词曲著作权权利人一&nbsp;&nbsp;&nbsp;&nbsp;词曲比例一&nbsp;&nbsp;&nbsp;&nbsp;录音权权利人一&nbsp;&nbsp;&nbsp;&nbsp;录音比例一&nbsp;&nbsp;&nbsp;&nbsp;词曲著作权权利人二&nbsp;&nbsp;&nbsp;&nbsp;词曲比例二&nbsp;&nbsp;&nbsp;&nbsp;录音权权利人二&nbsp;&nbsp;&nbsp;&nbsp;录音比例二&nbsp;&nbsp;&nbsp;&nbsp;词曲著作权权利人三&nbsp;&nbsp;&nbsp;&nbsp;词曲比例三&nbsp;&nbsp;&nbsp;&nbsp;录音权权利人三&nbsp;&nbsp;&nbsp;&nbsp;录音比例三&nbsp;&nbsp;&nbsp;&nbsp;其它</span><span style="color: #800000">'</span><span style="color: #000000">.split(</span><span style="color: #800000">'</span><span style="color: #800000">\t</span><span style="color: #800000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;ttnum&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;range(len(titles)):<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tsheet.write(0,ttnum,g2u(titles[ttnum]))<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertData(cpid,cpname,&nbsp;music,actor,copyrightname,ytime,tsheet,</span><span style="color: #000000">1</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tsheet</span><span style="color: #000000">=</span><span style="color: #000000">cpmap[cpname][</span><span style="color: #000000">3</span><span style="color: #000000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpmap[cpname][</span><span style="color: #000000">1</span><span style="color: #000000">]</span><span style="color: #000000">=</span><span style="color: #000000">cpmap[cpname][</span><span style="color: #000000">1</span><span style="color: #000000">]</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertData(cpid,cpname,&nbsp;music,actor,copyrightname,ytime,tsheet,cpmap[cpname][</span><span style="color: #000000">1</span><span style="color: #000000">])<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">except</span><span style="color: #000000">&nbsp;:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">[error]:&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;music,actor,cpname,ytime,txls<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">pass</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;tkey&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;cpmap.keys()&nbsp;:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;ct</span><span style="color: #000000">=</span><span style="color: #000000">cpmap[tkey]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;ct[</span><span style="color: #000000">2</span><span style="color: #000000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;ct[0].save(ct[</span><span style="color: #000000">2</span><span style="color: #000000">])<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<br />
<p><br />
<br />
&nbsp;</p>
<img src ="http://www.blogjava.net/Skynet/aggbug/278952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-05-29 22:23 <a href="http://www.blogjava.net/Skynet/archive/2009/05/29/278952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>抓取 百度TOP500 并计算增量的 小程序（特留文）</title><link>http://www.blogjava.net/Skynet/archive/2009/05/06/269164.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Wed, 06 May 2009 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/05/06/269164.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/269164.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/05/06/269164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/269164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/269164.html</trackback:ping><description><![CDATA[<br />
<br />
<br />
#关键字<br />
&nbsp;&nbsp; python,pycurl, SGMLParser ,sqlite3, 抓取 , 增量计算，encodeuri 转换，crontab ,mail <br />
#参考<br />
&nbsp; sqlite3&nbsp; http://linuxgazette.net/109/chirico1.html<br />
&nbsp; SGMLParser <span style="color: #008000;">http://www.woodpecker.org.cn/diveintopython/html_processing/index.html</span><span style="color: #008000;"><br />
</span><br />
<br />
<br />
<br />
提取 python <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;pycurl<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;sgmllib&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;SGMLParser<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;re<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;urllib&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;quote,&nbsp;unquote&nbsp;<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">使用&nbsp;SGMLParser(html&nbsp;分析)&nbsp;类继承</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">详细请查看</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;http://www.woodpecker.org.cn/diveintopython/html_processing/index.html</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;BaiduTop_GMLParser(SGMLParser):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;reset(self,&nbsp;verbose</span><span style="color: #000000;">=</span><span style="color: #000000;">0):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SGMLParser.reset(self)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.data</span><span style="color: #000000;">=</span><span style="color: #000000;">[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.a&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;None<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;start_a(self,&nbsp;attrs):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;href&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[v&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;k,&nbsp;v&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;attrs&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;k</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">href</span><span style="color: #800000;">'</span><span style="color: #000000;">]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rsc</span><span style="color: #000000;">=</span><span style="color: #000000;">re.search(</span><span style="color: #800000;">'</span><span style="color: #800000;">word=(.*)\+(.*)</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;href[0]&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;href&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;rsc&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">#</span><span style="color: #008000;">baidu&nbsp;页面编码为&nbsp;gbk&nbsp;,并且中文&nbsp;encodeuri&nbsp;了</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">#</span><span style="color: #008000;">此转换为&nbsp;utf8</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;music</span><span style="color: #000000;">=</span><span style="color: #000000;">unquote(rsc.group(</span><span style="color: #000000;">1</span><span style="color: #000000;">)).decode(</span><span style="color: #800000;">'</span><span style="color: #800000;">gbk</span><span style="color: #800000;">'</span><span style="color: #000000;">).encode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf8</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actors</span><span style="color: #000000;">=</span><span style="color: #000000;">unquote(rsc.group(</span><span style="color: #000000;">2</span><span style="color: #000000;">)).decode(</span><span style="color: #800000;">'</span><span style="color: #800000;">gbk</span><span style="color: #800000;">'</span><span style="color: #000000;">).encode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf8</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.data.append((actors,music))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.a</span><span style="color: #000000;">=</span><span style="color: #000000;">True<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;getData(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;self.data<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__init__</span><span style="color: #000000;">(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.reset()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pycurl.Curl()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setopt(pycurl.URL,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;StringIO<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;StringIO.StringIO()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setopt(pycurl.WRITEFUNCTION,&nbsp;b.write)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setopt(pycurl.FOLLOWLOCATION,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setopt(pycurl.MAXREDIRS,&nbsp;</span><span style="color: #000000;">5</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">c.setopt(pycurl.PROXY,&nbsp;'http://11.11.11.11:8080')</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">c.setopt(pycurl.PROXYUSERPWD,&nbsp;'aaa:aaa')</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.perform()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.feed(b.getvalue())<br />
<br />
</span></div>
<br />
<br />
使用 py<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">!python&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
#</span><span style="color: #008000;">&nbsp;-*-&nbsp;coding:&nbsp;UTF8&nbsp;-*-</span><span style="color: #008000;"><br />
</span><span style="color: #800000;">'''</span><span style="color: #800000;"><br />
新添加入&nbsp;top&nbsp;&nbsp;<br />
当天全量<br />
没有&nbsp;歌手名<br />
<br />
退出&nbsp;top<br />
<br />
drop&nbsp;table&nbsp;baidu_Top&nbsp;;<br />
create&nbsp;table&nbsp;baidu_Top&nbsp;(<br />
&nbsp;&nbsp;id&nbsp;integer&nbsp;auto_increment&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;,<br />
&nbsp;&nbsp;actor&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;music&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;createTime&nbsp;DATE<br />
);<br />
<br />
</span><span style="color: #800000;">'''</span><span style="color: #000000;"><br />
<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;sqlite3,os,sys<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;datetime,&nbsp;calendar&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;pdb<br />
<br />
</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;baiduTop500&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;BaiduTop_GMLParser<br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Action():<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__init__</span><span style="color: #000000;">(self,conn,data):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;conn&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.allData&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.newData&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.newNotActorData</span><span style="color: #000000;">=</span><span style="color: #000000;">[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.allNotActorData</span><span style="color: #000000;">=</span><span style="color: #000000;">[]<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;insertAll(self):&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertSql&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">insert&nbsp;into&nbsp;baidu_Top&nbsp;(actor,music,createTime)&nbsp;values&nbsp;(?,?,date())&nbsp;;</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isSql&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">select&nbsp;music&nbsp;from&nbsp;baidu_Top&nbsp;where&nbsp;actor=?&nbsp;and&nbsp;music=?&nbsp;and&nbsp;createTime=strftime('%Y-%m-%d',?)&nbsp;;</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isSql2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">select&nbsp;music&nbsp;from&nbsp;baidu_Top&nbsp;where&nbsp;actor=?&nbsp;and&nbsp;music=?&nbsp;and&nbsp;createTime=strftime('%Y-%m-%d',?)&nbsp;;</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.conn.cursor()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;actor,music&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;self.data&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.execute(isSql,(actor,music,datetime.date.today())&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cur.fetchall()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;res&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.execute(insertSql,(actor,music)&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.allData.append(&nbsp;(actor,music)&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;actor</span><span style="color: #000000;">==</span><span style="color: #800000;">""</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;actor</span><span style="color: #000000;">==</span><span style="color: #800000;">"</span><span style="color: #800000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.allNotActorData.append((actor,music))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;todate</span><span style="color: #000000;">=</span><span style="color: #000000;">(datetime.date.today()</span><span style="color: #000000;">-</span><span style="color: #000000;">datetime.timedelta(days</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.execute(isSql2,(actor,music,todate)&nbsp;&nbsp;)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;cur.fetchall()&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.newData.append(&nbsp;(actor,music)&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;actor</span><span style="color: #000000;">==</span><span style="color: #800000;">""</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;actor</span><span style="color: #000000;">==</span><span style="color: #800000;">"</span><span style="color: #800000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.newNotActorData.append((actor,music))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">except</span><span style="color: #000000;">&nbsp;Exception,&nbsp;myError:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excType,&nbsp;excValue,&nbsp;traceBack&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sys.exc_info()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;excType<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;myError<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.close()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">except</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">pass</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;pfor(title,data):<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;a,m&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;data&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">%s\t%s\t%s</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">(title,a,m)<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;line():<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">___________________________________________________________________________________</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">___________________________________________________________________________________</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;<br />
<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">__name__</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">__main__</span><span style="color: #800000;">"</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqlite3.connect(</span><span style="color: #800000;">"</span><span style="color: #800000;">/home/xj_liukaiyi/src/python/baidu_top/ex500</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ac&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Action(conn,BaiduTop_GMLParser().getData())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ac.insertAll()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">ac.insertNewByDate()</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'''</span><span style="color: #800000;">说明&nbsp;%s&nbsp;:&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;对比前一天新添加<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;not&nbsp;actor&nbsp;对比前一天新增加但没歌手名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;当天top&nbsp;500&nbsp;展现全部&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;not&nbsp;actor&nbsp;当天&nbsp;top&nbsp;500&nbsp;展现全部全但没歌手&nbsp;</span><span style="color: #800000;">'''</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">(datetime.date.today())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pfor(</span><span style="color: #800000;">"</span><span style="color: #800000;">new</span><span style="color: #800000;">"</span><span style="color: #000000;">,ac.newData)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pfor(</span><span style="color: #800000;">"</span><span style="color: #800000;">new&nbsp;not&nbsp;actor</span><span style="color: #800000;">"</span><span style="color: #000000;">,ac.newNotActorData)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pfor(</span><span style="color: #800000;">"</span><span style="color: #800000;">all</span><span style="color: #800000;">"</span><span style="color: #000000;">,ac.allData)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pfor(</span><span style="color: #800000;">"</span><span style="color: #800000;">all&nbsp;not&nbsp;actor</span><span style="color: #800000;">"</span><span style="color: #000000;">,ac.allNotActorData)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close()<br />
<br />
</span></div>
<br />
<br />
再通过系统 <br />
crontab -e<br />
<br />
<br />
邮箱 gbk 转码 ，后发送 。每天早上 5点 <br />
0 5 * * * /usr/local/bin/python /home/xj_liukaiyi/src/python/baidu_top/Action.py|perl -MEncode -ne 'print encode("GBK", decode("UTF-8",$_));' &gt; tmp ; mail -s "baidu Top 500"&nbsp; liukaiyi@gmail.com&nbsp; &lt; tmp;<br />
<br />
<a href="http://www.woodpecker.org.cn/diveintopython/html_processing/index.html"></a>
<img src ="http://www.blogjava.net/Skynet/aggbug/269164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-05-06 09:47 <a href="http://www.blogjava.net/Skynet/archive/2009/05/06/269164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python 正则匹配中文</title><link>http://www.blogjava.net/Skynet/archive/2009/05/02/268628.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Sat, 02 May 2009 10:27:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/05/02/268628.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/268628.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/05/02/268628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/268628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/268628.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 由于 需求原因，需要匹配 提取中文，大量google下，并没有我需要的。花了一个小时大概测试，此utf8中文通过，特留文。<br />
&nbsp;&nbsp; 参考： http://hi.baidu.com/nivrrex/blog/item/e6ccaf511d0926888d543071.html<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://topic.csdn.net/u/20070404/15/b011aa83-f9b7-43b3-bbff-bfe4f653df03.html<br />
<br />
&nbsp;&nbsp;&nbsp; 首先，确保所有编码都为 unicode<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 比如 str.decode('utf8') #从utf8文本中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u"啊l"&nbsp; #在控制台输出中 &nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (罗嗦下)本想使用参考一定编码 Hex 但郁闷的是 这每个字好像占2个位置，使用正则匹配无果。<br />
&nbsp;&nbsp;&nbsp; 其次，确定中文范围 : <strong>[\u4e00-\u9fa5]</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (这里注意下 python 的re写的时候) 要&nbsp; <strong>u</strong>"<strong>[\u4e00-\u9fa5]</strong>" #确定正则表达式也是 unicode 的<br />
&nbsp;&nbsp;&nbsp; demo :<br />
&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;re.match(ur</span><span style="color: #800000;">"</span><span style="color: #800000;">[\u4e00-\u9fa5]+</span><span style="color: #800000;">"</span><span style="color: #000000;">,</span><span style="color: #800000;">"</span><span style="color: #800000;">啊</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
None<br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;re.match(ur</span><span style="color: #800000;">"</span><span style="color: #800000;">[\u4e00-\u9fa5]+</span><span style="color: #800000;">"</span><span style="color: #000000;">,u</span><span style="color: #800000;">"</span><span style="color: #800000;">啊</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">_sre.SRE_Match&nbsp;object&nbsp;at&nbsp;</span><span style="color: #000000;">0x2a98981308</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
<br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;re.match(ur</span><span style="color: #800000;">"</span><span style="color: #800000;">[\u4e00-\u9fa5]+</span><span style="color: #800000;">"</span><span style="color: #000000;">,u</span><span style="color: #800000;">"</span><span style="color: #800000;">t</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
None<br />
<br />
<br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;tt<br />
现在才明白<br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;tt<br />
</span><span style="color: #800000;">'</span><span style="color: #800000;">\xe7\x8e\xb0\xe5\x9c\xa8\xe6\x89\x8d\xe6\x98\x8e\xe7\x99\xbd</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;re.match(r</span><span style="color: #800000;">"</span><span style="color: #800000;">[\u4e00-\u9fa5]</span><span style="color: #800000;">"</span><span style="color: #000000;">,tt.decode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf8</span><span style="color: #800000;">'</span><span style="color: #000000;">))<br />
None<br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;re.match(ur</span><span style="color: #800000;">"</span><span style="color: #800000;">[\u4e00-\u9fa5]</span><span style="color: #800000;">"</span><span style="color: #000000;">,tt.decode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf8</span><span style="color: #800000;">'</span><span style="color: #000000;">))<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">_sre.SRE_Match&nbsp;object&nbsp;at&nbsp;</span><span style="color: #000000;">0x2a955d9c60</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
<br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;re.match(ur</span><span style="color: #800000;">"</span><span style="color: #800000;">.*[</span><span style="color: #800000;">"</span><span style="color: #000000;">u4e00</span><span style="color: #000000;">-</span><span style="color: #800000;">"</span><span style="color: #800000;">u9fa5]+</span><span style="color: #800000;">"</span><span style="color: #000000;">,u</span><span style="color: #800000;">"</span><span style="color: #800000;">hi,匹配到了</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">_sre.SRE_Match&nbsp;object&nbsp;at&nbsp;</span><span style="color: #000000;">0x2a955d9c60</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;re.match(ur</span><span style="color: #800000;">"</span><span style="color: #800000;">.*[</span><span style="color: #800000;">"</span><span style="color: #000000;">u4e00</span><span style="color: #000000;">-</span><span style="color: #800000;">"</span><span style="color: #800000;">u9fa5]+</span><span style="color: #800000;">"</span><span style="color: #000000;">,u</span><span style="color: #800000;">"</span><span style="color: #800000;">hi,no&nbsp;no</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
None<br />
</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
<br />
其他 扩充 范围 (转)<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">这里是几个主要非英文语系字符范围(google上找到的):<br />
</span><strong><span style="color: #000000;">2E80</span></strong><span style="color: #000000;"><strong>～33FFh</strong>：中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符，中日韩的符号、标点、带圈或带括符文数字、月份，以及日本的假名组合、单位、年号、月份、日期、时间等。<br />
</span><strong><span style="color: #000000;">3400</span></strong><span style="color: #000000;"><strong>～4DFFh</strong>：中日韩认同表意文字扩充A区，总计收容6</span><span style="color: #000000;">,</span><span style="color: #000000;">582个中日韩汉字。<br />
</span><strong><span style="color: #000000;">4E00</span></strong><span style="color: #000000;"><strong>～9FFFh</strong>：中日韩认同表意文字区，总计收容20</span><span style="color: #000000;">,</span><span style="color: #000000;">902个中日韩汉字。<br />
<strong>A000～A4FFh</strong>：彝族文字区，收容中国南方彝族文字和字根。<br />
<strong>AC00～D7FFh</strong>：韩文拼音组合字区，收容以韩文音符拼成的文字。<br />
<strong>F900～FAFFh</strong>：中日韩兼容表意文字区，总计收容302个中日韩汉字。<br />
<strong>FB00～FFFDh</strong>：文字表现形式区，收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。<br />
比如需要匹配所有中日韩非符号字符</span><span style="color: #000000;">,</span><span style="color: #000000;">那么正则表达式应该是^</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">\u3400-\u9FFF</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">+$<br />
理论上没错</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;可是我到msn.co.ko随便复制了个韩文下来</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;发现根本不对</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;诡异<br />
再到msn.co.jp复制了个&#8217;お&#8217;</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;也不得行..<br />
然后把范围扩大到^</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">\u2E80-\u9FFF</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">+$</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;这样倒是都通过了</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;这个应该就是匹配中日韩文字的正则表达式了</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;包括我們臺灣省還在盲目使用的繁體中文<br />
而关于中文的正则表达式</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;应该是^</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">\u4E00-\u9FFF</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">+$</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;和论坛里常被人提起的^</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">\u4E00-\u9FA5</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">+$很接近<br />
需要注意的是论坛里说的^</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">\u4E00-\u9FA5</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">+$这是专门用于匹配简体中文的正则表达式</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;实际上繁体字也在里面</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;我用测试器测试了下&#8217;中華人民共和國&#8217;</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;也通过了</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;当然</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;^</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">\u4E00-\u9FFF</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">+$也是一样的结果。</span></div>
<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
<img src ="http://www.blogjava.net/Skynet/aggbug/268628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-05-02 18:27 <a href="http://www.blogjava.net/Skynet/archive/2009/05/02/268628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>py + sqlite3 demo</title><link>http://www.blogjava.net/Skynet/archive/2009/04/23/267084.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Thu, 23 Apr 2009 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/04/23/267084.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/267084.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/04/23/267084.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/267084.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/267084.html</trackback:ping><description><![CDATA[<br />
实际问题<br />
主要在编码问题下。<br />
我把这解决的办法说下吧，主要这统一 编码 utf8 <br />
0. 数据库 导入 utf8 <br />
&nbsp;&nbsp; 如果 导入文本 gbk <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perl -MEncode -ne 'print encode("UTF-8", decode("GBK",$_));'&nbsp; file.txt &gt; xx.data<br />
1. 代码编码 # -*- coding:UTF8 -*-<br />
2. 文件读取 编码 cc=bm(x.readline()).split('"t') <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bm=lambda str : str.decode('gbk').encode('utf-8')<br />
3. 对外输出 str="%s%s"t" % (str,bmug(f))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bmug=lambda str : unicode(str).encode("utf8")<br />
<br />
就是统一编码 ，我这统一 utf8<br />
&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;-*-&nbsp;coding:&nbsp;UTF8&nbsp;-*-</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;sqlite3,os<br />
</span><span style="color: #800000;">"""</span><span style="color: #800000;"><br />
drop&nbsp;table&nbsp;imusic&nbsp;;<br />
create&nbsp;table&nbsp;&nbsp;imusic(&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;musicname&nbsp;&nbsp;&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;productid&nbsp;&nbsp;&nbsp;&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;downcount&nbsp;&nbsp;&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;musicname2&nbsp;&nbsp;&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;actorname2&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;iszl&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;isqu&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;zlmmf&nbsp;&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;zlmp3&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;qump3&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;cpid&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;cpname&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;rows&nbsp;varchar(300)&nbsp;,<br />
&nbsp;&nbsp;&nbsp;tmp1&nbsp;varchar(300)&nbsp;<br />
);<br />
<br />
如果要使用<strong>主键</strong><br />
</span><strong>在建表第一列加&nbsp; id integer auto_increment&nbsp; PRIMARY KEY <br />
文本就要先处理下来<br />
awk 'BEGIN{vi=0}{vi++;print vi"\t"$0;}' 03.data &gt; 03.id.data</strong><span style="color: #800000;"><br />
<br />
</span><span style="color: #800000;">#&nbsp;文本&nbsp;"t&nbsp;分割&nbsp; 导入</span><br />
<span style="color: #800000;">
.separator&nbsp;"\t"<br />
.import&nbsp;db2.data&nbsp;imusic<br />
.separator&nbsp;","<br />
</span><span style="color: #800000;"><br />
#导出<br />
</span><span style="font-family: Courier New;">sqlite&gt; .output a.txt<br />
sqlite&gt; select * from tab_xx;<br />
sqlite&gt; .output stdout</span><br />
<span style="color: #800000;"><br />
"""</span><span style="color: #000000;"><br />
conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqlite3.connect(</span><span style="color: #800000;">"</span><span style="color: #800000;">ex1</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
cur&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;conn.cursor()<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">编码转换&nbsp;（我这&nbsp;在&nbsp;windows&nbsp;下）</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">bm</span><span style="color: #000000;">=</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">&nbsp;str&nbsp;:&nbsp;str.decode(</span><span style="color: #800000;">'</span><span style="color: #800000;">gbk</span><span style="color: #800000;">'</span><span style="color: #000000;">).encode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf-8</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
bmcc</span><span style="color: #000000;">=</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">&nbsp;str&nbsp;:&nbsp;str.decode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf8</span><span style="color: #800000;">'</span><span style="color: #000000;">).encode(</span><span style="color: #800000;">'</span><span style="color: #800000;">gbk</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
bmug</span><span style="color: #000000;">=</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">&nbsp;str&nbsp;:&nbsp;unicode(str).encode(</span><span style="color: #800000;">"</span><span style="color: #800000;">utf8</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;&nbsp;getValues(actor,music,zlxz,qqxz):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">&nbsp;select&nbsp;*&nbsp;from&nbsp;imusic&nbsp;&nbsp;where&nbsp;musicname2=?&nbsp;&nbsp;and&nbsp;actorname2=?&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.execute(sql,(&nbsp;music,actor)&nbsp;&nbsp;)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cur.fetchall()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;res&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data</span><span style="color: #000000;">=</span><span style="color: #000000;">[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;tt&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;res[0]:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.append(tt)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[</span><span style="color: #000000;">7</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #800000;">''</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;zlxz,</span><span style="color: #800000;">"</span><span style="color: #800000;">*</span><span style="color: #800000;">"</span><span style="color: #000000;">,qqxz<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;data[</span><span style="color: #000000;">8</span><span style="color: #000000;">]</span><span style="color: #000000;">==</span><span style="color: #800000;">''</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;&nbsp;data[</span><span style="color: #000000;">9</span><span style="color: #000000;">]</span><span style="color: #000000;">==</span><span style="color: #800000;">''</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;None<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;zlxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">有振铃下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[</span><span style="color: #000000;">8</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #800000;">''</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;qqxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">有全曲下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[</span><span style="color: #000000;">9</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #800000;">''</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;data[</span><span style="color: #000000;">8</span><span style="color: #000000;">]</span><span style="color: #000000;">==</span><span style="color: #800000;">''</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;&nbsp;data[</span><span style="color: #000000;">9</span><span style="color: #000000;">]</span><span style="color: #000000;">==</span><span style="color: #800000;">''</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;None<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;data<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">except</span><span style="color: #000000;">&nbsp;Exception,&nbsp;myError:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">[error]&nbsp;%s&nbsp;%s&nbsp;%s&nbsp;%s</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(actor,music,zlxz,qqxz)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;open(&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">all_comm.txt</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">r</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
cc</span><span style="color: #000000;">=</span><span style="color: #000000;">x.readline().split(</span><span style="color: #800000;">'</span><span style="color: #800000;">\t</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;cc&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc</span><span style="color: #000000;">=</span><span style="color: #000000;">bm(x.readline()).split(</span><span style="color: #800000;">'</span><span style="color: #800000;">\t</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd</span><span style="color: #000000;">=</span><span style="color: #000000;">getValues(cc[</span><span style="color: #000000;">6</span><span style="color: #000000;">],cc[</span><span style="color: #000000;">5</span><span style="color: #000000;">],cc[</span><span style="color: #000000;">21</span><span style="color: #000000;">],cc[</span><span style="color: #000000;">18</span><span style="color: #000000;">])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;dd&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;f&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;dd&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">%s%s\t</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(str,bmug(f))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;str<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">except</span><span style="color: #000000;">&nbsp;Exception,&nbsp;myError:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">[error]&nbsp;%s</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;cc <br />
</span></div>
<br />
<br />
下面 demo 注重 update 对比<br />
&nbsp;<span style="color: #000000;">&nbsp;&nbsp; # conn.total_changes</span> 使用<br />
为 update 跟新<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;-*-&nbsp;coding:&nbsp;UTF8&nbsp;-*-</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;sqlite3,os,sys</span><span style="color: #000000;"><br />
conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqlite3.connect(</span><span style="color: #800000;">"</span><span style="color: #800000;">ex4</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
cur&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;conn.cursor()<br />
<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">编码转换&nbsp;（我这&nbsp;在&nbsp;windows&nbsp;下）</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">bm</span><span style="color: #000000;">=</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">&nbsp;str&nbsp;:&nbsp;str.decode(</span><span style="color: #800000;">'</span><span style="color: #800000;">gbk</span><span style="color: #800000;">'</span><span style="color: #000000;">).encode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf-8</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
bmcc</span><span style="color: #000000;">=</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">&nbsp;str&nbsp;:&nbsp;str.decode(</span><span style="color: #800000;">'</span><span style="color: #800000;">utf8</span><span style="color: #800000;">'</span><span style="color: #000000;">).encode(</span><span style="color: #800000;">'</span><span style="color: #800000;">gbk</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
bmug</span><span style="color: #000000;">=</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">&nbsp;str&nbsp;:&nbsp;unicode(str).encode(</span><span style="color: #800000;">"</span><span style="color: #800000;">utf8</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
<br />
<br />
<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;&nbsp;getValues(actor,music,zlxz,qqxz,updateRow):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateSql&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">&nbsp;update&nbsp;&nbsp;imusic&nbsp;set&nbsp;tmp1=?&nbsp;where&nbsp;musicname2=?&nbsp;&nbsp;and&nbsp;actorname2=?&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;1&nbsp;有振铃&nbsp;有全曲</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;2&nbsp;无振铃&nbsp;有全曲</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;3&nbsp;有振铃&nbsp;无全曲</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;4&nbsp;无振铃&nbsp;无全曲</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">0</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;zlxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">有振铃下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;&nbsp;qqxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">有全曲下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">1</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;zlxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">无振铃下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;&nbsp;qqxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">有全曲下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">2</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;zlxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">有振铃下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;&nbsp;qqxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">无全曲下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">3</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;&nbsp;zlxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">无振铃下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;&nbsp;qqxz</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">无全曲下载</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">4</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur.execute(updateSql,(start,music,actor)&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;conn.total_changes</span><span style="color: #000000;">==</span><span style="color: #000000;">updateRow:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateRow</span><span style="color: #000000;">=</span><span style="color: #000000;">conn.total_changes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">[success=%s&nbsp;update=%s]&nbsp;%s-%s:%s&nbsp;%s</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(start,conn.total_changes,actor,music,zlxz,qqxz)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">[giveUp&nbsp;start=%s]&nbsp;%s-%s:%s&nbsp;%s</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(start,actor,music,zlxz,qqxz)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;bmcc(log)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.system(</span><span style="color: #800000;">"</span><span style="color: #800000;">&nbsp;echo&nbsp;%s&nbsp;&gt;&gt;&nbsp;log&nbsp;</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(bmcc(log))&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;updateRow<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">except</span><span style="color: #000000;">&nbsp;Exception,&nbsp;myError:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excType,&nbsp;excValue,&nbsp;traceBack&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sys.exc_info()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;excType<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;myError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;open(&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">all_comm2.txt</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">r</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />
cc</span><span style="color: #000000;">=</span><span style="color: #000000;">x.readline().split(</span><span style="color: #800000;">'</span><span style="color: #800000;">\t</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
myrows</span><span style="color: #000000;">=</span><span style="color: #000000;">0<br />
updateRow&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;0&nbsp;;<br />
</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;cc&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;myrows</span><span style="color: #000000;">=</span><span style="color: #000000;">myrows</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">rows&nbsp;=&nbsp;%s&nbsp;</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(myrows)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc</span><span style="color: #000000;">=</span><span style="color: #000000;">bm(x.readline()).split(</span><span style="color: #800000;">'</span><span style="color: #800000;">\t</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateRow</span><span style="color: #000000;">=</span><span style="color: #000000;">getValues(cc[</span><span style="color: #000000;">6</span><span style="color: #000000;">],cc[</span><span style="color: #000000;">5</span><span style="color: #000000;">],cc[</span><span style="color: #000000;">21</span><span style="color: #000000;">],cc[</span><span style="color: #000000;">18</span><span style="color: #000000;">],updateRow)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">except</span><span style="color: #000000;">&nbsp;Exception,&nbsp;myError:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excType,&nbsp;excValue,&nbsp;traceBack&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sys.exc_info()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;excType<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;myError&nbsp;&nbsp;&nbsp;<br />
<br />
</span></div>
<br />
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/267084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-04-23 10:09 <a href="http://www.blogjava.net/Skynet/archive/2009/04/23/267084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>py 单例</title><link>http://www.blogjava.net/Skynet/archive/2009/04/16/266053.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Thu, 16 Apr 2009 15:20:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/04/16/266053.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/266053.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/04/16/266053.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/266053.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/266053.html</trackback:ping><description><![CDATA[<br />
代码<br />
参考：http://www.python.org/dev/peps/pep-0318/
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;singleton(cls):<br />
&nbsp;&nbsp;&nbsp;&nbsp;instances&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;getinstance():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;cls&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;instances:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">new</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instances[cls]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cls()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;instances[cls]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;getinstance<br />
<br />
@singleton<br />
</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;MyClass:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">pass</span><span style="color: #000000;"><br />
<br />
<br />
x1</span><span style="color: #000000;">=</span><span style="color: #000000;">MyClass()<br />
</span><span style="color: #008000;">#</span><span style="color: #008000;">print&nbsp;new</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">x2</span><span style="color: #000000;">=</span><span style="color: #000000;">MyClass()<br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/Skynet/aggbug/266053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-04-16 23:20 <a href="http://www.blogjava.net/Skynet/archive/2009/04/16/266053.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python - chomp</title><link>http://www.blogjava.net/Skynet/archive/2009/04/15/265803.html</link><dc:creator>刘凯毅</dc:creator><author>刘凯毅</author><pubDate>Wed, 15 Apr 2009 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/Skynet/archive/2009/04/15/265803.html</guid><wfw:comment>http://www.blogjava.net/Skynet/comments/265803.html</wfw:comment><comments>http://www.blogjava.net/Skynet/archive/2009/04/15/265803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Skynet/comments/commentRss/265803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Skynet/services/trackbacks/265803.html</trackback:ping><description><![CDATA[<div>转自：<span  style="font-size: 23px; "><a href="http://markbieda.wordpress.com/2008/08/13/python-and-bioinformatics-and-perl-chomp-in-python/">http://markbieda.wordpress.com/2008/08/13/python-and-bioinformatics-and-perl-chomp-in-python/</a></span></div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&#160;chomppy(k):<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&#160;k</span><span style="color: #000000; ">==</span><span style="color: #800000; ">""</span><span style="color: #000000; ">:&#160;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&#160;</span><span style="color: #800000; ">""</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&#160;k</span><span style="color: #000000; ">==</span><span style="color: #800000; ">"</span><span style="color: #800000; ">\n</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">or</span><span style="color: #000000; ">&#160;k</span><span style="color: #000000; ">==</span><span style="color: #800000; ">"</span><span style="color: #800000; ">\r\n</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">or</span><span style="color: #000000; ">&#160;k</span><span style="color: #000000; ">==</span><span style="color: #800000; ">"</span><span style="color: #800000; ">\r</span><span style="color: #800000; ">"</span><span style="color: #000000; ">:&#160;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&#160;</span><span style="color: #800000; ">""</span><span style="color: #000000; "><br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&#160;len(k)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:&#160;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&#160;k&#160;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">depends&#160;on&#160;above&#160;case&#160;being&#160;not&#160;true</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&#160;len(k)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">and</span><span style="color: #000000; ">&#160;(k[</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #800000; ">'</span><span style="color: #800000; ">\n</span><span style="color: #800000; ">'</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">or</span><span style="color: #000000; ">&#160;k[</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #800000; ">'</span><span style="color: #800000; ">\r</span><span style="color: #800000; ">'</span><span style="color: #000000; ">):&#160;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&#160;k[0]<br />
&#160;&#160;&#160;&#160;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">done&#160;with&#160;weird&#160;cases,&#160;now&#160;deal&#160;with&#160;average&#160;case</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;lastend</span><span style="color: #000000; ">=</span><span style="color: #000000; ">k[</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">:]&#160;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">get&#160;last&#160;two&#160;pieces</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&#160;lastend</span><span style="color: #000000; ">==</span><span style="color: #800000; ">'</span><span style="color: #800000; ">\r\n</span><span style="color: #800000; ">'</span><span style="color: #000000; ">:<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;outstr</span><span style="color: #000000; ">=</span><span style="color: #000000; ">k[:</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&#160;outstr<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">elif</span><span style="color: #000000; ">&#160;(lastend[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #800000; ">"</span><span style="color: #800000; ">\n</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">or</span><span style="color: #000000; ">&#160;lastend[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">==</span><span style="color: #800000; ">"</span><span style="color: #800000; ">\r</span><span style="color: #800000; ">"</span><span style="color: #000000; ">):<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;outstr</span><span style="color: #000000; ">=</span><span style="color: #000000; ">k[:</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&#160;outstr<br />
&#160;&#160;&#160;&#160;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&#160;k<br />
</span><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;chomppy(&#8217;cow\n&#8217;)<br />
&#8216;cow&#8217;<br />
</span><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;chomppy(&#8221;)<br />
&#8221;<br />
</span><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;chomppy(&#8217;hat&#8217;)<br />
&#8216;hat&#8217;<br />
</span><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;chomppy(&#8217;cat\r\n&#8217;)<br />
&#8216;cat&#8217;<br />
</span><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;chomppy(&#8217;\n&#8217;)<br />
&#8221;<br />
</span><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;chomppy(&#8217;\r\n&#8217;)<br />
&#8221;<br />
</span><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;chomppy(&#8217;cat\r&#8217;)<br />
&#8216;cat&#8217;<br />
</span><span style="color: #000000; ">>>></span><span style="color: #000000; ">&#160;chomppy(&#8217;\r&#8217;)<br />
&#8221;</span></div>
</div>
<img src ="http://www.blogjava.net/Skynet/aggbug/265803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Skynet/" target="_blank">刘凯毅</a> 2009-04-15 17:47 <a href="http://www.blogjava.net/Skynet/archive/2009/04/15/265803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>