<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>wj&#039;s blog</title>
	<atom:link href="http://blog.zhangwenjin.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.zhangwenjin.com</link>
	<description>写代码需谋定而后动，没有想清楚绝对不动手</description>
	<lastBuildDate>Fri, 27 Aug 2010 06:48:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>边大师ie6下固定浮动层的修正js</title>
		<link>http://blog.zhangwenjin.com/?p=112</link>
		<comments>http://blog.zhangwenjin.com/?p=112#comments</comments>
		<pubDate>Fri, 27 Aug 2010 06:48:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=112</guid>
		<description><![CDATA[很棒的代码。比我写的好多了。贴出代码供大家参考：
 
]]></description>
			<content:encoded><![CDATA[<p>很棒的代码。比我写的好多了。贴出代码供大家参考：<br />
<script src="http://gist.github.com/552934.js"> </script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=112</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>兼容ie6底部浮动的工具栏的代码</title>
		<link>http://blog.zhangwenjin.com/?p=109</link>
		<comments>http://blog.zhangwenjin.com/?p=109#comments</comments>
		<pubDate>Fri, 27 Aug 2010 06:39:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=109</guid>
		<description><![CDATA[不多说废话了。看下面代码：
 
]]></description>
			<content:encoded><![CDATA[<p>不多说废话了。看下面代码：<br />
<script src="http://gist.github.com/552922.js"> </script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=109</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>svn working copy 版本</title>
		<link>http://blog.zhangwenjin.com/?p=106</link>
		<comments>http://blog.zhangwenjin.com/?p=106#comments</comments>
		<pubDate>Wed, 28 Jul 2010 06:50:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=106</guid>
		<description><![CDATA[目前svn客户端已经升级到1.6，1.6版本库的文件结构已经做了调整。但一些ide集成的svn仍旧使用1.5，当再次用svn更新时候就会提示 This client is too old to work with working copy。
这个时候只要把svn working copy 降级即可。
d:\change-svn-wc-format.py E:\work\ 1.4 &#8211;force
第一个change-svn-wc-format.py是执行脚本
第二个E:\work\sadapter是工程路径
第三个1.4是要修改到的版本
第四个&#8211;force不是必须的，在执行失败的情况下可以加入此参数。
change-svn-wc-format.py 下载地址：http://dl.javaeye.com/topics/download/f3d6910a-2493-3682-bd66-9fa059a033f5
]]></description>
			<content:encoded><![CDATA[<p>目前svn客户端已经升级到1.6，1.6版本库的文件结构已经做了调整。但一些ide集成的svn仍旧使用1.5，当再次用svn更新时候就会提示 This client is too old to work with working copy。<br />
这个时候只要把svn working copy 降级即可。<br />
d:\change-svn-wc-format.py E:\work\ 1.4 &#8211;force<br />
第一个change-svn-wc-format.py是执行脚本<br />
第二个E:\work\sadapter是工程路径<br />
第三个1.4是要修改到的版本<br />
第四个&#8211;force不是必须的，在执行失败的情况下可以加入此参数。<br />
change-svn-wc-format.py 下载地址：http://dl.javaeye.com/topics/download/f3d6910a-2493-3682-bd66-9fa059a033f5</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=106</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>python pdb 基础调试</title>
		<link>http://blog.zhangwenjin.com/?p=104</link>
		<comments>http://blog.zhangwenjin.com/?p=104#comments</comments>
		<pubDate>Tue, 20 Jul 2010 06:14:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=104</guid>
		<description><![CDATA[首先你选择运行的 py
python -m pdb myscript.py
(Pdb) 会自动停在第一行，等待调试,这时你可以看看 帮助
(Pdb) h
说明下这几个关键 命令
&#62;断点设置
(Pdb)b  10 #断点设置在本py的第10行
或(Pdb)b  ots.py:20 #断点设置到 ots.py第20行
删除断点（Pdb）b #查看断点编号
(Pdb)cl 2 #删除第2个断点
禁用断点(Pdb)disable 2 #禁用第2个断点
设置某个断点的count，当count为0的时候断点状态为active，count不为0的时候每一次进入断点时候count自减
(Pdb) condition 2 10 #当运行10次后激活断点2
&#62;运行
(Pdb)n #单步运行
(Pdb)s #细点运行 也就是会下到，方法
(Pdb)c #跳到下个断点
(Pdb)l(ist) [first [,last]] #列出代码
(Pdb)a(rgs) #打印出当前函数的参数
&#62;查看
(Pdb)p param #查看当前 变量值
(Pdb)l #查看运行到某处代码
(Pdb)a #查看全部栈内变量
(Pdb)(!) statement #执行代码
(Pdb) q(uit)  #退出
]]></description>
			<content:encoded><![CDATA[<p>首先你选择运行的 py<br />
python -m pdb myscript.py<br />
(Pdb) 会自动停在第一行，等待调试,这时你可以看看 帮助<br />
(Pdb) h<br />
说明下这几个关键 命令</p>
<p>&gt;断点设置<br />
(Pdb)b  10 #断点设置在本py的第10行<br />
或(Pdb)b  ots.py:20 #断点设置到 ots.py第20行<br />
删除断点（Pdb）b #查看断点编号<br />
(Pdb)cl 2 #删除第2个断点<br />
禁用断点(Pdb)disable 2 #禁用第2个断点<br />
设置某个断点的count，当count为0的时候断点状态为active，count不为0的时候每一次进入断点时候count自减<br />
(Pdb) condition 2 10 #当运行10次后激活断点2</p>
<p>&gt;运行<br />
(Pdb)n #单步运行<br />
(Pdb)s #细点运行 也就是会下到，方法<br />
(Pdb)c #跳到下个断点<br />
(Pdb)l(ist) [first [,last]] #列出代码<br />
(Pdb)a(rgs) #打印出当前函数的参数<br />
&gt;查看<br />
(Pdb)p param #查看当前 变量值<br />
(Pdb)l #查看运行到某处代码<br />
(Pdb)a #查看全部栈内变量<br />
(Pdb)(!) statement #执行代码<br />
(Pdb) q(uit)  #退出</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=104</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php 二维数组排序</title>
		<link>http://blog.zhangwenjin.com/?p=102</link>
		<comments>http://blog.zhangwenjin.com/?p=102#comments</comments>
		<pubDate>Wed, 14 Jul 2010 07:21:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=102</guid>
		<description><![CDATA[直接上代码

]]></description>
			<content:encoded><![CDATA[<p>直接上代码<br />
<script src="http://gist.github.com/475139.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=102</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>python 多进程的服务端</title>
		<link>http://blog.zhangwenjin.com/?p=99</link>
		<comments>http://blog.zhangwenjin.com/?p=99#comments</comments>
		<pubDate>Wed, 14 Jul 2010 03:54:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=99</guid>
		<description><![CDATA[直接贴代码了。

]]></description>
			<content:encoded><![CDATA[<p>直接贴代码了。<br />
<script src="http://gist.github.com/474997.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=99</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>将金士顿8GU盘制作为xp启动盘</title>
		<link>http://blog.zhangwenjin.com/?p=94</link>
		<comments>http://blog.zhangwenjin.com/?p=94#comments</comments>
		<pubDate>Tue, 13 Jul 2010 08:40:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[log]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=94</guid>
		<description><![CDATA[
下载UltraISOhttp://www.xdowns.com/soft/softdown.asp?softid=54865
下载xp iso安装文件
用UltraISO 打开 xp 镜像

选择 启动 -&#62; 写入硬盘镜像

选择U盘，点击写入即可


]]></description>
			<content:encoded><![CDATA[<ol>
<li>下载UltraISOhttp://www.xdowns.com/soft/softdown.asp?softid=54865</li>
<li>下载xp iso安装文件</li>
<li>用UltraISO 打开 xp 镜像<br />
<a href="http://blog.zhangwenjin.com/wp-content/uploads/2010/07/搜狗截图_2010-07-13_16-31-41.png"><img class="alignnone size-full wp-image-91" title="搜狗截图_2010-07-13_16-31-41" src="http://blog.zhangwenjin.com/wp-content/uploads/2010/07/搜狗截图_2010-07-13_16-31-41.png" alt="" width="787" height="578" /></a></li>
<li>选择 启动 -&gt; 写入硬盘镜像<br />
<a href="http://blog.zhangwenjin.com/wp-content/uploads/2010/07/搜狗截图_2010-07-13_16-32-57.png"><img class="alignnone size-full wp-image-92" title="搜狗截图_2010-07-13_16-32-57" src="http://blog.zhangwenjin.com/wp-content/uploads/2010/07/搜狗截图_2010-07-13_16-32-57.png" alt="" width="783" height="581" /></a></li>
<li>选择U盘，点击写入即可<br />
<a href="http://blog.zhangwenjin.com/wp-content/uploads/2010/07/搜狗截图_2010-07-13_16-35-28.png"><img class="alignnone size-full wp-image-93" title="搜狗截图_2010-07-13_16-35-28" src="http://blog.zhangwenjin.com/wp-content/uploads/2010/07/搜狗截图_2010-07-13_16-35-28.png" alt="" width="727" height="199" /></a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=94</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>搭建mysql master-slave replication</title>
		<link>http://blog.zhangwenjin.com/?p=88</link>
		<comments>http://blog.zhangwenjin.com/?p=88#comments</comments>
		<pubDate>Mon, 12 Jul 2010 05:37:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=88</guid>
		<description><![CDATA[转载：http://www.sou5.cn/archives/606.html
本篇文章记录了如何搭建一个master-slave架 构的mysql数据库服务器，一般用于读写分离的场景下：master for  INSERT/UPDATE/DELETE，slave for SELECT。
根据实战结果，在master-connect-retry＝5的情况下，基本可以做到读写同步（可以打开slave的log文件来观察同步结果：tail -f  /var/run/mysql/mysql.log）
基本信息
主库：192.168.1.1
从库：192.168.1.2
数据文件存放位置：/data/mysql
待同步数据库：除了mysql、test库以外的所有数据库
一、设置MASTER
1、修改my.cnf
#vi /etc/my.cnf
server-id=1
log-bin
binlog-ignore-db=mysql
binlog-ignore-db=test
2、赋予SLAVE权限帐号，允许用户在 MASTER上LOAD TABLE和LOAD DATA
mysql&#62; GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO slave@192.168.1.2 IDENTIFIED BY ‘password’;
3、锁主库表
mysql&#62; FLUSH TABLES WITH READ LOCK;
4、显示主库信息
记录File和Position，从库设置将会用到
mysql&#62; SHOW MASTER STATUS;
+—————+———-+————–+——————+
&#124; File          &#124; Position &#124; Binlog_do_db &#124; Binlog_ignore_db &#124;
+—————+———-+————–+——————+
&#124; hathor-bin.001 &#124; 79   &#124;              &#124; mysql,test         &#124;
+—————+———-+————–+——————+
5、打包主库
# [...]]]></description>
			<content:encoded><![CDATA[<p>转载：http://www.sou5.cn/archives/606.html</p>
<p>本篇文章记录了如何搭建一个master-slave架 构的mysql数据库服务器，一般用于读写分离的场景下：master for  INSERT/UPDATE/DELETE，slave for SELECT。<br />
根据实战结果，在master-connect-retry＝5的情况下，基本可以做到读写同步（可以打开slave的log文件来观察同步结果：tail -f  /var/run/mysql/mysql.log）</p>
<p>基本信息</p>
<p>主库：192.168.1.1<br />
从库：192.168.1.2<br />
数据文件存放位置：/data/mysql<br />
待同步数据库：除了mysql、test库以外的所有数据库</p>
<p>一、设置MASTER</p>
<p>1、修改my.cnf</p>
<p>#vi /etc/my.cnf<br />
server-id=1<br />
log-bin<br />
binlog-ignore-db=mysql<br />
binlog-ignore-db=test</p>
<p>2、赋予SLAVE权限帐号，允许用户在 MASTER上LOAD TABLE和LOAD DATA</p>
<p>mysql&gt; GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO <a href="mailto:slave@192.168.1.2">slave@192.168.1.2</a> IDENTIFIED BY ‘password’;</p>
<p>3、锁主库表</p>
<p>mysql&gt; FLUSH TABLES WITH READ LOCK;</p>
<p>4、显示主库信息</p>
<p>记录File和Position，从库设置将会用到</p>
<p>mysql&gt; SHOW MASTER STATUS;<br />
+—————+———-+————–+——————+<br />
| File          | Position | Binlog_do_db | Binlog_ignore_db |<br />
+—————+———-+————–+——————+<br />
| hathor-bin.001 | 79   |              | mysql,test         |<br />
+—————+———-+————–+——————+</p>
<p>5、打包主库</p>
<p># cd /data<br />
# tar cvfz db.tar.gz db/</p>
<p>二、设置SLAVE</p>
<p>1、把数据库文件部署到slave服务器</p>
<p># cd /data<br />
# scp 192.168.1.1:/data/db.tar.gz<br />
# tar xvfz db.tar.gz</p>
<p>2、解锁主库表</p>
<p>mysql&gt; UNLOCK TABLES;</p>
<p>3、查看修改数据库文件夹权限</p>
<p># chown mysql:mysql syncdb -R</p>
<p>4、修改my.cnf</p>
<p># vi /etc/my.cnf<br />
server-id=2<br />
master-host=192.168.1.1<br />
master-user=slave<br />
master-password=password<br />
master-port=3306<br />
#Controls the retry interval. The default is 60 seconds.<br />
master-connect-retry=5</p>
<p>Trouble Shoot</p>
<p>Mysql 5到这一步一般就ok了，如果遇到问题再看下面的</p>
<p>如果报错跟Position相关的错误，再手动设置一下File/Position信息<br />
设置连接MASTER MASTER_LOG_FILE为主库的File，MASTER_LOG_POS为主库的Position</p>
<p>mysql&gt; CHANGE MASTER TO MASTER_HOST=’192.168.1.1′,<br />
MASTER_USER=’slave’,<br />
MASTER_PASSWORD=’password’,<br />
MASTER_LOG_FILE=’mysql-bin.001′,<br />
MASTER_LOG_POS=79;</p>
<p>启动SLAVE服务</p>
<p>mysql&gt; slave start;</p>
<p>查看SLAVE状态</p>
<p>mysql&gt; SHOW SLAVE STATUS;</p>
<p>Q：为何找不到binlog文件？<br />
A：mysql会把binlog、log、errorlog放在与–pid-file相同的目录</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=88</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python-字符串操作方法</title>
		<link>http://blog.zhangwenjin.com/?p=86</link>
		<comments>http://blog.zhangwenjin.com/?p=86#comments</comments>
		<pubDate>Mon, 12 Jul 2010 03:31:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=86</guid>
		<description><![CDATA[转载：http://www.sou5.cn/archives/636.html
字符串中字符大小写的变换：
* S.lower()   #小写
* S.upper()   #大写
* S.swapcase()   #大小写互换
* S.capitalize()   #首字母大写
* String.capwords(S)
#这是模块中的方法。它把S用split()函数分开，然后用capitalize()把首字母变成大写，最后用join()合并到一起
* S.title()    #只有首字母大写，其余为小写，模块中没有这个方法
字符串在输出时的对齐： 
* S.ljust(width,[fillchar])
#输出width个字符，S左对齐，不足部分用fillchar填充，默认的为空格。
* S.rjust(width,[fillchar])    #右对齐
* S.center(width, [fillchar])    #中间对齐
* S.zfill(width)   #把S变成width长，并在右对齐，不足部分用0补足
字符串中的搜索和替换：
* S.find(substr, [start, [end]])
#返回S中出现substr的第一个字母的标号，如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
* S.index(substr, [start, [end]])
#与find()相同，只是在S中没有substr时，会返回一个运行时错误
* S.rfind(substr, [start, [end]])
#返回S中最后出现的substr的第一个字母的标号，如果S中没有substr则返回-1，也就是说从右边算起的第一次出现的substr的首字母标号
* S.rindex(substr, [start, [end]])
* S.count(substr, [start, [end]])    #计算substr在S中出现的次数
* S.replace(oldstr, newstr, [count])
#把S中的oldstar替换为newstr，count为替换次数。这是替换的通用形式，还有一些函数进行特殊字符的替换
* S.strip([chars])
#把S中前后chars中有的字符全部去掉，可以理解为把S前后chars替换为None
* S.lstrip([chars])
* S.rstrip([chars])
* S.expandtabs([tabsize])
#把S中的tab字符替换没空格，每个tab替换为tabsize个空格，默认是8个
字符串的分割和组合：
* S.split([sep, [maxsplit]])
#以sep为分隔符，把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
* S.rsplit([sep, [maxsplit]])
* S.splitlines([keepends])
#把S按照行分割符分为一个list，keepends是一个bool值，如果为真每行后而会保留行分割符。
* S.join(seq) #把seq代表的序列──字符串序列，用S连接起来
字符串的mapping，这一功能包含两个函数：
* String.maketrans(from, to)
#返回一个256个字符组成的翻译表，其中from中的字符被一一对应地转换成to，所以from和to必须是等长的。
* S.translate(table[,deletechars])
#使用上面的函数产后的翻译表，把S进行翻译，并把deletechars中有的字符删掉。需要注意的是，如果S为unicode字符串，那么就不支持  [...]]]></description>
			<content:encoded><![CDATA[<p>转载：http://www.sou5.cn/archives/636.html</p>
<p><strong>字符串中字符大小写的变换：</strong></p>
<p>* S.lower()   #小写<br />
* S.upper()   #大写<br />
* S.swapcase()   #大小写互换<br />
* S.capitalize()   #首字母大写<br />
* String.capwords(S)<br />
#这是模块中的方法。它把S用split()函数分开，然后用capitalize()把首字母变成大写，最后用join()合并到一起<br />
* S.title()    #只有首字母大写，其余为小写，模块中没有这个方法</p>
<p><strong>字符串在输出时的对齐： </strong></p>
<p>* S.ljust(width,[fillchar])<br />
#输出width个字符，S左对齐，不足部分用fillchar填充，默认的为空格。<br />
* S.rjust(width,[fillchar])    #右对齐<br />
* S.center(width, [fillchar])    #中间对齐<br />
* S.zfill(width)   #把S变成width长，并在右对齐，不足部分用0补足</p>
<p><strong>字符串中的搜索和替换：</strong></p>
<p>* S.find(substr, [start, [end]])<br />
#返回S中出现substr的第一个字母的标号，如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索<br />
* S.index(substr, [start, [end]])<br />
#与find()相同，只是在S中没有substr时，会返回一个运行时错误<br />
* S.rfind(substr, [start, [end]])<br />
#返回S中最后出现的substr的第一个字母的标号，如果S中没有substr则返回-1，也就是说从右边算起的第一次出现的substr的首字母标号<br />
* S.rindex(substr, [start, [end]])<br />
* S.count(substr, [start, [end]])    #计算substr在S中出现的次数<br />
* S.replace(oldstr, newstr, [count])<br />
#把S中的oldstar替换为newstr，count为替换次数。这是替换的通用形式，还有一些函数进行特殊字符的替换<br />
* S.strip([chars])<br />
#把S中前后chars中有的字符全部去掉，可以理解为把S前后chars替换为None<br />
* S.lstrip([chars])<br />
* S.rstrip([chars])<br />
* S.expandtabs([tabsize])<br />
#把S中的tab字符替换没空格，每个tab替换为tabsize个空格，默认是8个</p>
<p><strong>字符串的分割和组合：</strong></p>
<p>* S.split([sep, [maxsplit]])<br />
#以sep为分隔符，把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符<br />
* S.rsplit([sep, [maxsplit]])<br />
* S.splitlines([keepends])<br />
#把S按照行分割符分为一个list，keepends是一个bool值，如果为真每行后而会保留行分割符。<br />
* S.join(seq) #把seq代表的序列──字符串序列，用S连接起来</p>
<p><strong>字符串的mapping，这一功能包含两个函数：</strong></p>
<p>* String.maketrans(from, to)<br />
#返回一个256个字符组成的翻译表，其中from中的字符被一一对应地转换成to，所以from和to必须是等长的。<br />
* S.translate(table[,deletechars])<br />
#使用上面的函数产后的翻译表，把S进行翻译，并把deletechars中有的字符删掉。需要注意的是，如果S为unicode字符串，那么就不支持  deletechars参数，可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译  表。</p>
<p><strong>字符串还有一对编码和解码的函数：</strong></p>
<p>* S.encode([encoding,[errors]])<br />
#其中encoding可以有多种值，比如gb2312 gbk gb18030 bz2 zlib big5  bzse64等都支持。errors默认值为”strict”，意思是UnicodeError。可能的值还有’ignore’, ‘replace’,  ‘xmlcharrefreplace’, ‘backslashreplace’  和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块，不是特明白<br />
* S.decode([encoding,[errors]])</p>
<p><strong>字符串的测试函数，这一类函数在string模块中没有，这些函数返回的都是bool值：</strong></p>
<p>* S.startwith(prefix[,start[,end]])<br />
#是否以prefix开头<br />
* S.endwith(suffix[,start[,end]])<br />
#以suffix结尾<br />
* S.isalnum()<br />
#是否全是字母和数字，并至少有一个字符<br />
* S.isalpha()  #是否全是字母，并至少有一个字符<br />
* S.isdigit()  #是否全是数字，并至少有一个字符<br />
* S.isspace() #是否全是空白字符，并至少有一个字符<br />
* S.islower() #S中的字母是否全是小写<br />
* S.isupper() #S中的字母是否便是大写<br />
* S.istitle() #S是否是首字母大写的</p>
<p><strong>字符串类型转换函数，这几个函数只在string模块中有：</strong></p>
<p>* string.atoi(s[,base])<br />
#base默认为10，如果为0,那么s就可以是012或0×23这种形式的字符串，如果是16那么s就只能是0×23或0X12这种形式的字符串<br />
* string.atol(s[,base])  #转成long<br />
* string.atof(s[,base])  #转成float</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=86</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用Python编写WEB服务器压力测试工具</title>
		<link>http://blog.zhangwenjin.com/?p=83</link>
		<comments>http://blog.zhangwenjin.com/?p=83#comments</comments>
		<pubDate>Sat, 10 Jul 2010 17:03:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.zhangwenjin.com/?p=83</guid>
		<description><![CDATA[别人写的，看着不错就引用。原文地址：http://www.xinqdian.com/index.php/archives/125/
自己也写过类似的。不过代码太丑陋了，就不贴出来了。大致思想一样，把压力最大的一些链接挑出来，一个劲的加线程数量，每台机器要加500线程以上都没问题。mac os 注意看下ulimit 是否有限制。

]]></description>
			<content:encoded><![CDATA[<p>别人写的，看着不错就引用。原文地址：http://www.xinqdian.com/index.php/archives/125/<br />
自己也写过类似的。不过代码太丑陋了，就不贴出来了。大致思想一样，把压力最大的一些链接挑出来，一个劲的加线程数量，每台机器要加500线程以上都没问题。mac os 注意看下ulimit 是否有限制。<br />
<script src="http://gist.github.com/470857.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhangwenjin.com/?feed=rss2&amp;p=83</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
