<?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>The Townes &#187; Python</title>
	<atom:link href="https://thetownes.coolpage.biz/?cat=126&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://thetownes.coolpage.biz</link>
	<description>本站已转移至：http://www.thetownes.info</description>
	<lastBuildDate>Thu, 01 Aug 2013 11:49:56 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.2</generator>
		<item>
		<title>python join 和 split的常用使用方法</title>
		<link>https://thetownes.coolpage.biz/?p=484</link>
		<comments>https://thetownes.coolpage.biz/?p=484#comments</comments>
		<pubDate>Thu, 01 Aug 2013 11:49:56 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[join和split]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=484</guid>
		<description><![CDATA[python join 和 split方法的使用,join用来连接字符串，spl &#8230; <a href="https://thetownes.coolpage.biz/?p=484">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>python join 和 split方法的使用,join用来连接字符串，split恰好相反，拆分字符串的。</p>
<div>1.join用法示例&nbsp;</div>
<div>&gt;&gt;&gt;li = ['my','name','is','bob']&nbsp;</div>
<div>&gt;&gt;&gt;&#8217; &#8216;.join(li)&nbsp;</div>
<div>&#8216;my name is bob&#8217;&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt;&#8217;_&#8217;.join(li)&nbsp;</div>
<div>&#8216;my_name_is_bob&#8217;&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt; s = ['my','name','is','bob']&nbsp;</div>
<div>&gt;&gt;&gt; &#8216; &#8216;.join(s)&nbsp;</div>
<div>&#8216;my name is bob&#8217;&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt; &#8216;..&#8217;.join(s)&nbsp;</div>
<div>&#8216;my..name..is..bob&#8217;&nbsp;</div>
<div>&nbsp;</div>
<div>2.split用法示例&nbsp;</div>
<div>&gt;&gt;&gt; b = &#8216;my..name..is..bob&#8217;&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt; b.split()&nbsp;</div>
<div>['my..name..is..bob']&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt; b.split(&#8220;..&#8221;)&nbsp;</div>
<div>['my', 'name', 'is', 'bob']&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt; b.split(&#8220;..&#8221;,0)&nbsp;</div>
<div>['my..name..is..bob']&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt; b.split(&#8220;..&#8221;,1)&nbsp;</div>
<div>['my', 'name..is..bob']&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt; b.split(&#8220;..&#8221;,2)&nbsp;</div>
<div>['my', 'name', 'is..bob']&nbsp;</div>
<div>&nbsp;</div>
<div>&gt;&gt;&gt; b.split(&#8220;..&#8221;,-1)&nbsp;</div>
<div>['my', 'name', 'is', 'bob']&nbsp;</div>
<div>&nbsp;</div>
<div>可以看出 b.split(&#8220;..&#8221;,-1)等价于b.split(&#8220;..&#8221;)&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=484</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python中文decode和encode转码</title>
		<link>https://thetownes.coolpage.biz/?p=482</link>
		<comments>https://thetownes.coolpage.biz/?p=482#comments</comments>
		<pubDate>Thu, 01 Aug 2013 11:48:47 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[中文decode和encode]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=482</guid>
		<description><![CDATA[字符串在Python内部的表示是unicode编码，因此，在做编码转换时，通常需 &#8230; <a href="https://thetownes.coolpage.biz/?p=482">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>字符串在Python内部的表示是unicode编码，因此，在做编码转换时，通常需要以unicode作为中间编码，即先将其他编码的字符串解码（decode）成unicode，再从unicode编码（encode）成另一种编码。</p>
<p>decode的作用是将其他编码的字符串转换成unicode编码，如str1.decode(&#8216;gb2312&#8242;)，表示将gb2312编码的字符串str1转换成unicode编码。</p>
<p>encode的作用是将unicode编码转换成其他编码的字符串，如str2.encode(&#8216;gb2312&#8242;)，表示将unicode编码的字符串str2转换成gb2312编码。</p>
<p>因此，转码的时候一定要先搞明白，字符串str是什么编码，然后decode成unicode，然后再encode成其他编码</p>
<p>（与代码本身的编码是一致的！）</p>
<p>测试：<br />
我的eclipse里面代码为utf-8编码的。然后我这样写代码<br />
s=&#8221;你好&#8221;<br />
s=s.decode(&#8216;gb2312&#8242;).encode(&#8216;utf-8&#8242;)<br />
print s<br />
报错：<br />
UnicodeDecodeError: &#8216;gb2312&#8242; codec can&#8217;t decode bytes in position 2-3: illegal multibyte sequence<br />
原因：因为我的文件为UTF-8编码的。所以你想用gb2312将其转成unicode是不可能的。<br />
所以正确的写法应当是：<br />
s=&#8221;你好&#8221;<br />
print s<br />
s=s.decode(&#8216;utf-8&#8242;).encode(&#8216;utf-8&#8242;) 要用UTF-8来做编码<br />
print s<br />
哈哈发现打印出来的是乱码那只能说明一件事情就是我的eclipse控制台是GB2312的编码！</p>
<p>请看：<br />
如何获得系统的默认编码？<br />
#!/usr/bin/env python<br />
#coding=utf-8<br />
import sys<br />
print sys.getdefaultencoding()</p>
<p>该段程序在英文WindowsXP上输出为：ascii 。我发现我的linux上面也是ascii编码。所以我想打印出来看到的乱码是正常的。因为我其实是utf-8编码的。</p>
<p>在某些IDE中，字符串的输出总是出现乱码，甚至错误，其实是由于IDE的结果输出控制台自身不能显示字符串的编码，而不是程序本身的问题。（是的。我的eclipse控制台就是gb2312的编码所以我文件保存为utf-8的时候然后再通过打印是乱码了！）<br />
1、读文件命令肯定是：<br />
myfile = codecs.open(&#8220;c.<a href="http://www.2cto.com/kf/qianduan/css/" target="_blank">html</a>&#8220;,&#8221;r&#8221;,&#8221;utf-8&#8243;) 因为我用gb2312来读的话报错</p>
<p>心得：检查一个字符串是什么编码只需要看一下decode 如果用gb2312来decode没报错的话就表示是gb2312<br />
如果用utf-8来decode没有报错的话就表示是utf-8</p>
<p>现在遇到一个问题就是<br />
请看：<br />
myfile = codecs.open(&#8220;c.html&#8221;,&#8221;r&#8221;,&#8221;utf-8&#8243;)<br />
str = myfile.read()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />
content = str.replace(&#8220;\n&#8221;,&#8221; &#8220;)&nbsp;&nbsp;<br />
content = content.encode(&#8216;utf-8&#8242;)<br />
print content<br />
没有报错<br />
再看：<br />
myfile = codecs.open(&#8220;c.html&#8221;,&#8221;r&#8221;,&#8221;utf-8&#8243;)<br />
str = myfile.read()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />
content = str.replace(&#8220;\n&#8221;,&#8221; &#8220;)&nbsp;&nbsp;<br />
content = content.encode(&#8216;gb2312&#8242;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用gb2312<br />
print content<br />
报错：UnicodeEncodeError: &#8216;gb2312&#8242; codec can&#8217;t encode character u&#8217;\u2014&#8242; in position 12628</p>
<p>再看：<br />
myfile = codecs.open(&#8220;d.html&#8221;,&#8221;r&#8221;,&#8221;utf-8&#8243;)<br />
str = myfile.read()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />
content = str.replace(&#8220;\n&#8221;,&#8221; &#8220;)&nbsp;&nbsp;<br />
content = content.encode(&#8216;gb2312&#8242;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用gb2312<br />
print content<br />
没问题<br />
myfile = codecs.open(&#8220;d.html&#8221;,&#8221;r&#8221;,&#8221;utf-8&#8243;)<br />
str = myfile.read()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />
content = str.replace(&#8220;\n&#8221;,&#8221; &#8220;)&nbsp;&nbsp;<br />
content = content.encode(&#8216;utf-8&#8242;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
print content<br />
也没问题</p>
<p>结论：我想是c.html页面里面 存在某些 特殊字符 只支持utf-8编码。而不支持gb2312的编码！<br />
而d.html没有这种特殊字符。这也就解释了为什么<br />
有的文件并没有发生我们想像中的问题！</p>
<p>所以我感觉打开文件肯定是用utf-8来读取得到一个unicode编码值！<br />
然后对其做utf-8的编码处理。因为如果你做gb2312处理的话就会报错了！</p>
<p>接着：<br />
我看了一下我的正则表达式发现如果用gb2312做解码处理的话一样会报错。所以断定肯定是utf-8编码了！<br />
regex3 = regex3.decode(&#8216;utf-8&#8242;)<br />
print type(regex3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #返回为unicode码了！<br />
print regex3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #居然打印为正常的中文显示了 奇怪</p>
<p>尝试解决办法：<br />
1、全部用unicode处理<br />
即正则我用regex3 = regex3.decode(&#8216;utf-8&#8242;) 将其处理成 unicode编码了。然后内容也<br />
print type(content) 也是unicode编码。结果还是不行！</p>
<p>难道是我的linux终端的编码引起的吗？我看了一下<br />
locale 发现是GBK的终端的。即只有GBK编码才能显示出来为中文的！<br />
于是我将<br />
regex3 = regex3.decode(&#8216;utf-8&#8242;).encode(&#8216;gb2312&#8242;) 编码成gb2312结果可以显示中文！</p>
<p>OK。我又将我的内容也一起弄成GB2312<br />
content = content.encode(&#8216;gb2312&#8242;,&#8217;ignore&#8217;)<br />
print content&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也可以成功打印出来中文。</p>
<p>我想这个时候应该没有什么问题了吧。结果一用正则又死掉了。昏死！！！！！！！</p>
<p>换另外一个好的文件测试下看看：换了之后发现没死而且成功了！</p>
<p>所以我觉得：肯定是这个文件里面的某些内容与正则匹配出现了冲突！导致的!</p>
<p>继续跟踪：<br />
出现如下的情况<br />
myfile = codecs.open(&#8220;01.htm&#8221;,&#8221;r&#8221;,&#8221;utf-8&#8243;,&#8221;ignore&#8221;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
str = myfile.read()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />
content = str.replace(&#8220;\n&#8221;,&#8221; &#8220;)<br />
print type(content)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #发现是unicode码<br />
regex3 = &#8216;class=wpcps<a href="http://www.2cto.com/kf/qianduan/css/" target="_blank">CSS</a>&gt;([^&lt;]+)(?:.*?wpcppb_CSS&gt; ([0-9]+) &lt;/span&gt;)?.*?(?:.*?(已被关闭))?.*?([0-9]+)个回答.*?([0-9]+)次浏览.*?(?:&lt;div&gt;.*?user\?userid=([0-9]+).*?&gt;(.*?)&lt;/a&gt; &lt;/div&gt;.*?)?(?:user\?userid=([0-9]+)&#8221;)?]+&#8221;&gt;([^&lt;]+).*?class=wpcptsCSS&gt;([^&lt;]+).*?([0-9.]{9,}\*).*?class=wpcpdCSS&gt;(.*?)&lt;/div&gt; &lt;div&gt;&#8217;<br />
content = content.encode(&#8216;utf-8&#8242;)<br />
p=re.compile(regex3)<br />
results = p.findall(content)</p>
<p>没有什么问题可以成功出来结果。但是我<br />
将content = content.encode(&#8216;gb2312&#8242;) 的话就发现 死掉了！<br />
说明我的内容content与我的正则的编码其实是不一样的！<br />
我现在将我的正则也调成gb2312来测试。结果发现可以出来。而且我的结果<br />
results = p.findall(content)<br />
for ele in results:<br />
&nbsp;&nbsp;&nbsp; print ele[0],ele[1],ele[2],ele[3],ele[4],ele[5],ele[6],ele[7],ele[8],ele[9],ele[10]<br />
在eclipse(默认为gb2312)下面也是没有问题的了！～</p>
<p>所以我想：如果content是GBK那正则的内容也应当是GBK 即两者的编码一定要保持一致！否则就会出现死掉程序的情况！</p>
<p>现在我这样来处理<br />
全部使用unicode编码处理</p>
<p>myfile = codecs.open(&#8220;right.html&#8221;,&#8221;r&#8221;)&nbsp;&nbsp;&nbsp;<br />
str = myfile.read()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />
content = str.replace(&#8220;\n&#8221;,&#8221; &#8220;)<br />
content = content.decode(&#8216;utf-8&#8242;,&#8217;ignore&#8217;)&nbsp;&nbsp;&nbsp;&nbsp; #使用utf-8解码出来<br />
都使用unicode编码吧<br />
现在正则也用<br />
regex3 = regex3.decode(&#8216;utf-8&#8242;,&#8217;ignore&#8217;) 使用utf-8搞成unicode编码</p>
<p>OK现在再来测试！</p>
<p>结论：<br />
解决正则出现中文的BUG结论：<br />
1、打开文件<br />
myfile = codecs.open(&#8220;right.html&#8221;,&#8221;r&#8221;)<br />
不需要设置其编码的！</p>
<p>设置编码格式<br />
str = myfile.read()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />
content = str.replace(&#8220;\n&#8221;,&#8221; &#8220;)<br />
content = content.decode(&#8216;utf-8&#8242;,&#8217;ignore&#8217;)&nbsp;&nbsp; #使用utf-8解码成unicode格式</p>
<p>正则：<br />
regex3 = regex3.decode(&#8216;utf-8&#8242;,&#8217;ignore&#8217;)&nbsp;&nbsp;&nbsp; #正则也统一使用utf-8解码成unicode格式</p>
<p>然后就可以<br />
p=re.compile(regex3)<br />
results = p.findall(content)<br />
调用正则了！</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=482</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python常见文件操作的函数示例</title>
		<link>https://thetownes.coolpage.biz/?p=479</link>
		<comments>https://thetownes.coolpage.biz/?p=479#comments</comments>
		<pubDate>Thu, 01 Aug 2013 03:48:50 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[python文件操作]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=479</guid>
		<description><![CDATA[# -*-coding:utf8 -*-&#160; &#160; &#8221 &#8230; <a href="https://thetownes.coolpage.biz/?p=479">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p># -*-coding:utf8 -*-&nbsp;</p>
<p>&nbsp;</p>
<p>&#8221;&#8221;&#8217;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.2cto.com/kf/web/Python/" target="_blank">Python</a>常见文件操作示例</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; os.path 模块中的路径名访问函数</p>
<p>&nbsp;&nbsp;&nbsp; 分隔</p>
<p>&nbsp;&nbsp;&nbsp; basename() 去掉目录路径, 返回文件名</p>
<p>&nbsp;&nbsp;&nbsp; dirname() 去掉文件名, 返回目录路径</p>
<p>&nbsp;&nbsp;&nbsp; join() 将分离的各部分组合成一个路径名</p>
<p>&nbsp;&nbsp;&nbsp; split() 返回(dirname(), basename()) 元组</p>
<p>&nbsp;&nbsp;&nbsp; splitdrive() 返回(drivename, pathname) 元组</p>
<p>&nbsp;&nbsp;&nbsp; splitext() 返回(filename, extension) 元组</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 信息</p>
<p>&nbsp;&nbsp;&nbsp; getatime() 返回最近访问时间</p>
<p>&nbsp;&nbsp;&nbsp; getctime() 返回文件创建时间</p>
<p>&nbsp;&nbsp;&nbsp; getmtime() 返回最近文件修改时间</p>
<p>&nbsp;&nbsp;&nbsp; getsize() 返回文件大小(以字节为单位)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 查询</p>
<p>&nbsp;&nbsp;&nbsp; exists() 指定路径(文件或目录)是否存在</p>
<p>&nbsp;&nbsp;&nbsp; isabs() 指定路径是否为绝对路径</p>
<p>&nbsp;&nbsp;&nbsp; isdir() 指定路径是否存在且为一个目录</p>
<p>&nbsp;&nbsp;&nbsp; isfile() 指定路径是否存在且为一个文件</p>
<p>&nbsp;&nbsp;&nbsp; islink() 指定路径是否存在且为一个符号链接</p>
<p>&nbsp;&nbsp;&nbsp; ismount() 指定路径是否存在且为一个挂载点</p>
<p>&nbsp;&nbsp;&nbsp; samefile() 两个路径名是否指向同个文件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; os.path.isdir(name):判断name是不是一个目录，name不是目录就返回false</p>
<p>&nbsp;&nbsp;&nbsp; os.path.isfile(name):判断name是不是一个文件，不存在name也返回false</p>
<p>&nbsp;&nbsp;&nbsp; os.path.exists(name):判断是否存在文件或目录name</p>
<p>&nbsp;&nbsp;&nbsp; os.path.getsize(name):获得文件大小，如果name是目录返回0L</p>
<p>&nbsp;&nbsp;&nbsp; os.path.abspath(name):获得绝对路径</p>
<p>&nbsp;&nbsp;&nbsp; os.path.normpath(path):规范path字符串形式</p>
<p>&nbsp;&nbsp;&nbsp; os.path.split(name):分割文件名与目录（事实上，如果你完全使用目录，它也会将最后一个目录作为文件名而分离，同时它不会判断文件或目录是否存在）</p>
<p>&nbsp;&nbsp;&nbsp; os.path.splitext():分离文件名与扩展名</p>
<p>&nbsp;&nbsp;&nbsp; os.path.join(path,name):连接目录与文件名或目录</p>
<p>&nbsp;&nbsp;&nbsp; os.path.basename(path):返回文件名</p>
<p>&nbsp;&nbsp;&nbsp; os.path.dirname(path):返回文件路径</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; os模块中的文件操作：</p>
<p>&nbsp;&nbsp;&nbsp; os 模块属性</p>
<p>&nbsp;&nbsp;&nbsp; linesep 用于在文件中分隔行的字符串</p>
<p>&nbsp;&nbsp;&nbsp; sep 用来分隔文件路径名的字符串</p>
<p>&nbsp;&nbsp;&nbsp; pathsep 用于分隔文件路径的字符串</p>
<p>&nbsp;&nbsp;&nbsp; curdir 当前工作目录的字符串名称</p>
<p>&nbsp;&nbsp;&nbsp; pardir (当前工作目录的)父目录字符串名称</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 1.重命名：os.rename(old, new)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 2.删除：os.remove(file)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 3.列出目录下的文件：os.listdir(path)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 4.获取当前工作目录：os.getcwd()</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 5.改变工作目录：os.chdir(newdir)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 6.创建多级目录：os.makedirs(r&#8221;c:\python\test&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 7.创建单个目录：os.mkdir(&#8220;test&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 8.删除多个目录：os.removedirs(r&#8221;c:\python&#8221;) #删除所给路径最后一个目录下所有空目录。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 9.删除单个目录：os.rmdir(&#8220;test&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 10.获取文件属性：os.stat(file)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 11.修改文件权限与时间戳：os.chmod(file)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 12.执行操作<a href="http://www.2cto.com/os/" target="_blank">系统</a>命令：os.system(&#8220;dir&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 13.启动新进程：os.exec(), os.execvp()</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 14.在后台执行程序：osspawnv()</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 15.终止当前进程：os.exit(), os._exit()</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 16.分离文件名：os.path.split(r&#8221;c:\python\hello.py&#8221;) &#8211;&gt; (&#8220;c:\\python&#8221;, &#8220;hello.py&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 17.分离扩展名：os.path.splitext(r&#8221;c:\python\hello.py&#8221;) &#8211;&gt; (&#8220;c:\\python\\hello&#8221;, &#8220;.py&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 18.获取路径名：os.path.dirname(r&#8221;c:\python\hello.py&#8221;) &#8211;&gt; &#8220;c:\\python&#8221;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 19.获取文件名：os.path.basename(r&#8221;r:\python\hello.py&#8221;) &#8211;&gt; &#8220;hello.py&#8221;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 20.判断文件是否存在：os.path.exists(r&#8221;c:\python\hello.py&#8221;) &#8211;&gt; True</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 21.判断是否是绝对路径：os.path.isabs(r&#8221;.\python\&#8221;) &#8211;&gt; False</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 22.判断是否是目录：os.path.isdir(r&#8221;c:\python&#8221;) &#8211;&gt; True</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 23.判断是否是文件：os.path.isfile(r&#8221;c:\python\hello.py&#8221;) &#8211;&gt; True</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 24.判断是否是链接文件：os.path.islink(r&#8221;c:\python\hello.py&#8221;) &#8211;&gt; False</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 25.获取文件大小：os.path.getsize(filename)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 26.*******：os.ismount(&#8220;c:\\&#8221;) &#8211;&gt; True</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 27.搜索目录下的所有文件：os.path.walk()</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; shutil模块对文件的操作：</p>
<p>&nbsp;&nbsp;&nbsp; 1.复制单个文件：shultil.copy(oldfile, newfle)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 2.复制整个目录树：shultil.copytree(r&#8221;.\setup&#8221;, r&#8221;.\backup&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 3.删除整个目录树：shultil.rmtree(r&#8221;.\backup&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 临时文件的操作：</p>
<p>&nbsp;&nbsp;&nbsp; 1.创建一个唯一的临时文件：tempfile.mktemp() &#8211;&gt; filename</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 2.打开临时文件：tempfile.TemporaryFile()</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 内存文件（StringIO和cStringIO）操作</p>
<p>&nbsp;&nbsp;&nbsp; [4.StringIO] #cStringIO是StringIO模块的快速实现模块</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 1.创建内存文件并写入初始数据：f = StringIO.StringIO(&#8220;Hello world!&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 2.读入内存文件数据：print f.read() #或print f.getvalue() &#8211;&gt; Hello world!</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp;&nbsp;3.想内存文件写入数据：f.write(&#8220;Good day!&#8221;)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 4.关闭内存文件：f.close()</p>
<p>&#8221;&#8217;&nbsp;</p>
<p>import os&nbsp;</p>
<p>import os.path&nbsp;</p>
<p>import unittest&nbsp;</p>
<p>import time&nbsp;</p>
<p>#import pygame&nbsp;</p>
<p>&nbsp;</p>
<p>class PyFileCommonOperatorTest(unittest.TestCase):&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; def __init__(self):&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;&#8221;"constructor&#8221;"&#8221;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; def test01(self):&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print os.linesep&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print os.sep&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print os.pathsep&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print os.curdir&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print os.pardir&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print os.getcwd()&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8216;unittest here&#8217;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>if __name__ == &#8220;__main__&#8221;:&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; t = PyFileCommonOperatorTest()&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; t.test01()&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>#读文件的写法：&nbsp;</p>
<p>#读文本文件：&nbsp;&nbsp;</p>
<p>input = open(&#8216;data&#8217;, &#8216;r&#8217;)#第二个参数是默认的，可以不加&nbsp;</p>
<p>#读二进制文件：&nbsp;&nbsp;</p>
<p>input = open(&#8216;data&#8217;, &#8216;rb&#8217;)&nbsp;</p>
<p>#读取所有文件内容：&nbsp;</p>
<p>open(&#8216;xxoo.txt&#8217;).read()&nbsp;</p>
<p>#读取固定字节&nbsp;</p>
<p>open(&#8216;abinfile&#8217;, &#8216;rb&#8217;).read(100)&nbsp;</p>
<p>#读每行&nbsp;</p>
<p>file_object.readlines()&nbsp; &nbsp;</p>
<p>&nbsp;</p>
<p>作者 scelong</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=479</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python的一个字典创建程序</title>
		<link>https://thetownes.coolpage.biz/?p=476</link>
		<comments>https://thetownes.coolpage.biz/?p=476#comments</comments>
		<pubDate>Thu, 01 Aug 2013 03:47:04 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[python字典]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=476</guid>
		<description><![CDATA[来源：素包子 字典的用处非常大，昨天在网上找了个能在linux跑的字典程序，分享 &#8230; <a href="https://thetownes.coolpage.biz/?p=476">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>来源：素包子</p>
<p>字典的用处非常大，昨天在网上找了个能在linux跑的字典程序，分享一下。<br />
#!/usr/bin/python<br />
f=open(‘wordlist’, ‘w’)<br />
&nbsp;<br />
def xselections(items, n):<br />
&nbsp;&nbsp;&nbsp; if n==0: yield []<br />
&nbsp;&nbsp;&nbsp; else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i in xrange(len(items)):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ss in xselections(items, n-1):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield [items[i]]+ss<br />
&nbsp;<br />
# Numbers = 48 – 57<br />
# Capital = 65 – 90<br />
# Lower = 97 – 122<br />
numb = range(48,58)<br />
cap = range(65,91)<br />
low = range(97,123)<br />
choice = 0<br />
while int(choice) not in range(1,8):<br />
&nbsp;&nbsp;&nbsp; choice = raw_input(”’<br />
&nbsp;&nbsp;&nbsp; 1) Numbers<br />
&nbsp;&nbsp;&nbsp; 2) Capital Letters<br />
&nbsp;&nbsp;&nbsp; 3) Lowercase Letters<br />
&nbsp;&nbsp;&nbsp; 4) Numbers + Capital Letters<br />
&nbsp;&nbsp;&nbsp; 5) Numbers + Lowercase Letters<br />
&nbsp;&nbsp;&nbsp; 6) Numbers + Capital Letters + Lowercase Letters<br />
&nbsp;&nbsp;&nbsp; 7) Capital Letters + Lowercase Letters<br />
&nbsp;&nbsp;&nbsp; : ”’)<br />
&nbsp;<br />
choice = int(choice)<br />
poss = []<br />
if choice == 1:<br />
&nbsp;&nbsp;&nbsp; poss += numb<br />
elif choice == 2:<br />
&nbsp;&nbsp;&nbsp; poss += cap<br />
elif choice == 3:<br />
&nbsp;&nbsp;&nbsp; poss += low<br />
elif choice == 4:<br />
&nbsp;&nbsp;&nbsp; poss += numb<br />
&nbsp;&nbsp;&nbsp; poss += cap<br />
elif choice == 5:<br />
&nbsp;&nbsp;&nbsp; poss += numb<br />
&nbsp;&nbsp;&nbsp; poss += low<br />
elif choice == 6:<br />
&nbsp;&nbsp;&nbsp; poss += numb<br />
&nbsp;&nbsp;&nbsp; poss += cap<br />
&nbsp;&nbsp;&nbsp; poss += low<br />
elif choice == 7:<br />
&nbsp;&nbsp;&nbsp; poss += cap<br />
&nbsp;&nbsp;&nbsp; poss += low<br />
&nbsp;<br />
bigList = []<br />
for i in poss:<br />
&nbsp;&nbsp;&nbsp; bigList.append(str(chr(i)))<br />
&nbsp;<br />
MIN = raw_input(“What is the min size of the word? “)<br />
MIN = int(MIN)<br />
MAX = raw_input(“What is the max size of the word? “)<br />
MAX = int(MAX)<br />
for i in range(MIN,MAX+1):<br />
&nbsp;&nbsp;&nbsp; for s in xselections(bigList,i): f.write(”.join(s) + ‘ ’)&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=476</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python的url编码函数使用的一个小问题</title>
		<link>https://thetownes.coolpage.biz/?p=473</link>
		<comments>https://thetownes.coolpage.biz/?p=473#comments</comments>
		<pubDate>Thu, 01 Aug 2013 03:43:21 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[url编码函数]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=473</guid>
		<description><![CDATA[python的url编码函数是在类urllib库中，使用方法是： 编码：urll &#8230; <a href="https://thetownes.coolpage.biz/?p=473">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>python的url编码函数是在类urllib库中，使用方法是：</p>
<p>编码：urllib.quote(string[, safe])，除了三个符号“_.-”外，将所有符号编码，后面的参数safe是不编码的字符，使用的时候如果不设置的话，会将斜杠，冒号，等号，问号都给编码了。<br />
如下：</p>
<p>&gt;&gt;&gt; import urllib &gt;&gt;&gt; print urllib.quote(&#8220;<a href="http://neeao.com/index.php?id=1">http://neeao.com/index.php?id=1</a>&#8220;) http%3A//neeao.com/index.php%3Fid%3D1 这样在使用urllib.urlopen打开编码后的网址的时候，就会报错了。</p>
<p>设置下不编码的符号：</p>
<p>&gt;&gt;&gt; print urllib.quote(&#8220;<a href="http://neeao.com/index.php?id=1%22,%22:?=/">http://neeao.com/index.php?id=1&#8243;,&#8221;:?=/</a>&#8220;)<a href="http://neeao.com/index.php?id=1">http://neeao.com/index.php?id=1</a>&nbsp;这下就好了。</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=473</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python urllib2详解及实例</title>
		<link>https://thetownes.coolpage.biz/?p=471</link>
		<comments>https://thetownes.coolpage.biz/?p=471#comments</comments>
		<pubDate>Thu, 01 Aug 2013 03:42:08 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[urllib2]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=471</guid>
		<description><![CDATA[urllib2是Python的一个获取URLs(Uniform Resource &#8230; <a href="https://thetownes.coolpage.biz/?p=471">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。他以urlopen函数的形式提供了一个非常简单的接口，</p>
<p>这是具有利用不同协议获取URLs的能力，他同样提供了一个比较复杂的接口来处理一般情况，例如：基础验证，cookies,代理和其他。</p>
<p>它们通过handlers和openers的对象提供。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>urllib2支持获取不同格式的URLs(在URL的&#8221;:&#8221;前定义的字串,例如：&#8221;ftp&#8221;是&#8221;ftp:python.ort/&#8221;的前缀),它们利用它们相关网络协议(例如FTP,HTTP)</p>
<p>进行获取。这篇教程关注最广泛的应用&#8211;HTTP。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>对于简单的应用，urlopen是非常容易使用的。但当你在打开HTTP的URLs时遇到错误或异常，你将需要一些超文本传输协议(HTTP)的理解。</p>
<p>最权威的HTTP文档当然是RFC 2616(http://rfc.net/rfc2616.html)。这是一个技术文档，所以并不易于阅读。这篇HOWTO教程的目的是展现如何使用urllib2,</p>
<p>并提供足够的HTTP细节来帮助你理解。他并不是urllib2的文档说明，而是起一个辅助作用。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>获取 URLs</p>
<p>最简单的使用urllib2将如下所示</p>
<p>&nbsp;</p>
<p>[python:nogutter]&nbsp;<br />
import urllib2&nbsp;<br />
&nbsp;<br />
response = urllib2.urlopen(&#8216;http://python.org/&#8217;)&nbsp;<br />
&nbsp;<br />
html = response.read()&nbsp;<br />
&nbsp;</p>
<p>urllib2的很多应用就是那么简单(记住，除了&#8221;http:&#8221;,URL同样可以使用&#8221;ftp:&#8221;,&#8221;file:&#8221;等等来替代)。但这篇文章是教授HTTP的更复杂的应用。</p>
<p>&nbsp;</p>
<p>HTTP是基于请求和应答机制的&#8211;客户端提出请求，服务端提供应答。urllib2用一个Request对象来映射你提出的HTTP请求,在它最简单的使用形式中你将用你要请求的</p>
<p>地址创建一个Request对象，通过调用urlopen并传入Request对象，将返回一个相关请求response对象，这个应答对象如同一个文件对象，所以你可以在Response中调用.read()。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>[python]&nbsp;<br />
import urllib2&nbsp;<br />
&nbsp;<br />
req = urllib2.Request(&#8216;http://www.voidspace.org.uk&#8217;)&nbsp;<br />
&nbsp;<br />
response = urllib2.urlopen(req)&nbsp;<br />
&nbsp;<br />
the_page = response.read()&nbsp;<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>记得urllib2使用相同的接口处理所有的URL头。例如你可以像下面那样创建一个ftp请求。</p>
<p>&nbsp;</p>
<p>req = urllib2.Request(&#8216;ftp://example.com/&#8217;)</p>
<p>&nbsp;</p>
<p>在HTTP请求时，允许你做额外的两件事。首先是你能够发送data表单数据，其次你能够传送额外的关于数据或发送本身的信息(&#8220;metadata&#8221;)到服务器，此数据作为HTTP的&#8221;headers&#8221;来发送。</p>
<p>接下来让我们看看这些如何发送的吧。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Data数据</p>
<p>有时候你希望发送一些数据到URL(通常URL与CGI[通用网关接口]脚本，或其他WEB应用程序挂接)。在HTTP中,这个经常使用熟知的POST请求发送。这个通常在你提交一个HTML表单时由你的浏览器来做。</p>
<p>并不是所有的POSTs都来源于表单，你能够使用POST提交任意的数据到你自己的程序。一般的HTML表单，data需要编码成标准形式。然后做为data参数传到Request对象。编码工作使用urllib的函数而非</p>
<p>urllib2。</p>
<p>&nbsp;</p>
<p>[python:nogutter]&nbsp;<br />
import urllib&nbsp;<br />
&nbsp;<br />
import urllib2&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
url = &#8216;http://www.someserver.com/cgi-bin/register.cgi&#8217;&nbsp;<br />
&nbsp;<br />
values = {&#8216;name&#8217; : &#8216;Michael Foord&#8217;,&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;location&#8217; : &#8216;Northampton&#8217;,&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;language&#8217; : &#8216;Python&#8217; }&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
data = urllib.urlencode(values)&nbsp;<br />
&nbsp;<br />
req = urllib2.Request(url, data)&nbsp;<br />
&nbsp;<br />
response = urllib2.urlopen(req)&nbsp;<br />
&nbsp;<br />
the_page = response.read()&nbsp;<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>记住有时需要别的编码(例如从HTML上传文件&#8211;看http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13 HTML Specification, Form Submission的详细说明)。</p>
<p>&nbsp;</p>
<p>如ugoni没有传送data参数，urllib2使用GET方式的请求。GET和POST请求的不同之处是POST请求通常有&#8221;副作用&#8221;，它们会由于某种途径改变系统状态(例如提交成堆垃圾到你的门口)。</p>
<p>尽管HTTP标准说的很清楚POSTs通常会产生副作用，GET请求不会产生副作用，但没有什么可以阻止GET请求产生副作用，同样POST请求也可能不产生副作用。Data同样可以通过在Get请求</p>
<p>的URL本身上面编码来传送。</p>
<p>&nbsp;</p>
<p>可看如下例子</p>
<p>[python:nogutter]<br />
&gt;&gt;&gt; import urllib2&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; import urllib&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; data = {}&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; data['name'] = &#8216;Somebody Here&#8217;&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; data['location'] = &#8216;Northampton&#8217;&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; data['language'] = &#8216;Python&#8217;&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; url_values = urllib.urlencode(data)&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; print url_values&nbsp;<br />
&nbsp;<br />
name=Somebody+Here&amp;language=Python&amp;location=Northampton&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; url = &#8216;http://www.example.com/example.cgi&#8217;&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; full_url = url + &#8216;?&#8217; + url_values&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; data = urllib2.open(full_url)&nbsp;<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>Headers</p>
<p>我们将在这里讨论特定的HTTP头，来说明怎样添加headers到你的HTTP请求。</p>
<p>&nbsp;</p>
<p>有一些站点不喜欢被程序（非人为访问）访问，或者发送不同版本的内容到不同的浏览器。默认的urllib2把自己作为“Python-urllib/x.y”(x和y是Python主版本和次版本号,例如Python-urllib/2.5)，</p>
<p>这个身份可能会让站点迷惑，或者干脆不工作。浏览器确认自己身份是通过User-Agent头，当你创建了一个请求对象，你可以给他一个包含头数据的字典。下面的例子发送跟上面一样的内容，但把自身</p>
<p>模拟成Internet Explorer。</p>
<p>&nbsp;</p>
<p>[python:nogutter]&nbsp;<br />
import urllib&nbsp;<br />
&nbsp;<br />
import urllib2&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
url = &#8216;http://www.someserver.com/cgi-bin/register.cgi&#8217;&nbsp;<br />
&nbsp;<br />
user_agent = &#8216;Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)&#8217;&nbsp;<br />
&nbsp;<br />
values = {&#8216;name&#8217; : &#8216;Michael Foord&#8217;,&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;location&#8217; : &#8216;Northampton&#8217;,&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;language&#8217; : &#8216;Python&#8217; }&nbsp;<br />
&nbsp;<br />
headers = { &#8216;User-Agent&#8217; : user_agent }&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
data = urllib.urlencode(values)&nbsp;<br />
&nbsp;<br />
req = urllib2.Request(url, data, headers)&nbsp;<br />
&nbsp;<br />
response = urllib2.urlopen(req)&nbsp;<br />
&nbsp;<br />
the_page = response.read()&nbsp;<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>response应答对象同样有两个很有用的方法。看下面的节info and geturl，我们将看到当发生错误时会发生什么。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Handle Exceptions处理异常</p>
<p>当urlopen不能够处理一个response时，产生urlError（不过通常的Python APIs异常如ValueError,TypeError等也会同时产生）。</p>
<p>&nbsp;</p>
<p>HTTPError是urlError的子类，通常在特定HTTP URLs中产生。</p>
<p>&nbsp;</p>
<p>URLError</p>
<p>通常，URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。这种情况下，异常同样会带有&#8221;reason&#8221;属性，它是一个tuple，包含了一个错误号和一个错误信息。</p>
<p>&nbsp;</p>
<p>例如</p>
<p>&nbsp;</p>
<p>[python:nogutter]&nbsp;<br />
&gt;&gt;&gt; req = urllib2.Request(&#8216;http://www.pretend_server.org&#8217;)&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; try: urllib2.urlopen(req)&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; except URLError, e:&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt;&nbsp;&nbsp;&nbsp; print e.reason&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt;&nbsp;<br />
&nbsp;<br />
(4, &#8216;getaddrinfo failed&#8217;)&nbsp;<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>HTTPError</p>
<p>服务器上每一个HTTP 应答对象response包含一个数字&#8221;状态码&#8221;。有时状态码指出服务器无法完成请求。默认的处理器会为你处理一部分这种应答(例如:假如response是一个&#8221;重定向&#8221;，需要客户端从别的地址获取文档</p>
<p>，urllib2将为你处理)。其他不能处理的，urlopen会产生一个HTTPError。典型的错误包含&#8221;404&#8243;(页面无法找到)，&#8221;403&#8243;(请求禁止)，和&#8221;401&#8243;(带验证请求)。</p>
<p>&nbsp;</p>
<p>请看RFC 2616 第十节有所有的HTTP错误码</p>
<p>&nbsp;</p>
<p>HTTPError实例产生后会有一个整型&#8217;code&#8217;属性，是服务器发送的相关错误号。</p>
<p>&nbsp;</p>
<p>Error Codes错误码</p>
<p>因为默认的处理器处理了重定向(300以外号码)，并且100-299范围的号码指示成功，所以你只能看到400-599的错误号码。</p>
<p>&nbsp;</p>
<p>BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典，显示了RFC 2616使用的所有的应答号。这里为了方便重新展示该字典。（译者略）</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>当一个错误号产生后，服务器返回一个HTTP错误号，和一个错误页面。你可以使用HTTPError实例作为页面返回的应答对象response。这表示和错误属性一样，它同样包含了read,geturl,和info方法。</p>
<p>&nbsp;</p>
<p>[python:nogutter]&nbsp;<br />
&gt;&gt;&gt; req = urllib2.Request(&#8216;http://www.python.org/fish.html&#8217;)&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; try:&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; urllib2.urlopen(req)&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt; except URLError, e:&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; print e.code&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; print e.read()&nbsp;<br />
&nbsp;<br />
&gt;&gt;&gt;&nbsp;<br />
&nbsp;<br />
404&nbsp;<br />
&nbsp;<br />
&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221;&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &#8220;http://www.w3.org/TR/html4/loose.dtd&#8221;&gt;&nbsp;<br />
&nbsp;<br />
&lt;?xml-stylesheet href=&#8221;./css/ht2html.css&#8221;&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; type=&#8221;text/css&#8221;?&gt;&nbsp;<br />
&nbsp;<br />
&lt;html&gt;&lt;head&gt;&lt;title&gt;Error 404: File Not Found&lt;/title&gt;&nbsp;<br />
&nbsp;<br />
&#8230;&#8230; etc&#8230;&nbsp;<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>Wrapping it Up包装</p>
<p>&nbsp;</p>
<p>所以如果你想为HTTPError或URLError做准备，将有两个基本的办法。我则比较喜欢第二种。</p>
<p>&nbsp;</p>
<p>第一个：</p>
<p>[python:nogutter]&nbsp;<br />
from urllib2 import Request, urlopen, URLError, HTTPError&nbsp;<br />
&nbsp;<br />
req = Request(someurl)&nbsp;<br />
&nbsp;<br />
try:&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; response = urlopen(req)&nbsp;<br />
&nbsp;<br />
except HTTPError, e:&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; print &#8216;The server couldn/&#8217;t fulfill the request.&#8217;&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; print &#8216;Error code: &#8216;, e.code&nbsp;<br />
&nbsp;<br />
except URLError, e:&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; print &#8216;We failed to reach a server.&#8217;&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; print &#8216;Reason: &#8216;, e.reason&nbsp;<br />
&nbsp;<br />
else:&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; # everything is fine&nbsp;<br />
&nbsp;</p>
<p>注意：except HTTPError 必须在第一个，否则except URLError将同样接受到HTTPError。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>第二个：</p>
<p>[python:nogutter]&nbsp;<br />
from urllib2 import Request, urlopen, URLError&nbsp;<br />
&nbsp;<br />
req = Request(someurl)&nbsp;<br />
&nbsp;<br />
try:&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; response = urlopen(req)&nbsp;<br />
&nbsp;<br />
except URLError, e:&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; if hasattr(e, &#8216;reason&#8217;):&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8216;We failed to reach a server.&#8217;&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8216;Reason: &#8216;, e.reason&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; elif hasattr(e, &#8216;code&#8217;):&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8216;The server couldn/&#8217;t fulfill the request.&#8217;&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#8216;Error code: &#8216;, e.code&nbsp;<br />
&nbsp;<br />
else:&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; # everything is fine&nbsp;<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>info and geturl</p>
<p>urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl()</p>
<p>&nbsp;</p>
<p>geturl &#8212; 这个返回获取的真实的URL，这个很有用，因为urlopen(或者opener对象使用的)或许</p>
<p>会有重定向。获取的URL或许跟请求URL不同。</p>
<p>&nbsp;</p>
<p>info &#8212; 这个返回对象的字典对象，该字典描述了获取的页面情况。通常是服务器发送的特定头headers。目前是httplib.HTTPMessage 实例。</p>
<p>&nbsp;</p>
<p>经典的headers包含&#8221;Content-length&#8221;，&#8221;Content-type&#8221;，和其他。查看Quick Reference to HTTP Headers(http://www.cs.tut.fi/~jkorpela/http.html)</p>
<p>获取有用的HTTP头列表，以及它们的解释意义。</p>
<p>&nbsp;</p>
<p>Openers和Handlers</p>
<p>&nbsp;</p>
<p>当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例，urllib2.OpenerDirector可能名字可能有点让人混淆。)正常情况下，我们</p>
<p>使用默认opener &#8212; 通过urlopen,但你能够创建个性的openers，Openers使用处理器handlers，所有的“繁重”工作由handlers处理。每个handlers知道</p>
<p>如何通过特定协议打开URLs，或者如何处理URL打开时的各个方面，例如HTTP重定向或者HTTP cookies。</p>
<p>&nbsp;</p>
<p>如果你希望用特定处理器获取URLs你会想创建一个openers，例如获取一个能处理cookie的opener，或者获取一个不重定向的opener。</p>
<p>要创建一个 opener,实例化一个OpenerDirector，然后调用不断调用.add_handler(some_handler_instance).</p>
<p>&nbsp;</p>
<p>同样，可以使用build_opener，这是一个更加方便的函数，用来创建opener对象，他只需要一次函数调用。</p>
<p>&nbsp;</p>
<p>build_opener默认添加几个处理器，但提供快捷的方法来添加或更新默认处理器。</p>
<p>&nbsp;</p>
<p>其他的处理器handlers你或许会希望处理代理，验证，和其他常用但有点特殊的情况。</p>
<p>&nbsp;</p>
<p>install_opener 用来创建（全局）默认opener。这个表示调用urlopen将使用你安装的opener。</p>
<p>&nbsp;</p>
<p>Opener对象有一个open方法，该方法可以像urlopen函数那样直接用来获取urls：通常不必调用install_opener，除了为了方便。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Basic Authentication 基本验证</p>
<p>为了展示创建和安装一个handler，我们将使用HTTPBasicAuthHandler，为了更加细节的描述本主题&#8211;包含一个基础验证的工作原理。</p>
<p>请看Basic Authentication Tutorial（http://www.voidspace.org.uk/python/articles/authentication.shtml）</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>当需要基础验证时，服务器发送一个header(401错误码) 请求验证。这个指定了scheme 和一个‘realm’，看起来像这样：Www-authenticate: SCHEME realm=&#8221;REALM&#8221;.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>例如</p>
<p>Www-authenticate: Basic realm=&#8221;cPanel Users&#8221;</p>
<p>&nbsp;</p>
<p>客户端必须使用新的请求，并在请求头里包含正确的姓名和密码。这是“基础验证”，为了简化这个过程，我们可以创建一个HTTPBasicAuthHandler的实例，并让opener使用这个</p>
<p>handler。</p>
<p>&nbsp;</p>
<p>HTTPBasicAuthHandler使用一个密码管理的对象来处理URLs和realms来映射用户名和密码。如果你知道realm(从服务器发送来的头里)是什么，你就能使用HTTPPasswordMgr。</p>
<p>通常人们不关心realm是什么。那样的话，就能用方便的HTTPPasswordMgrWithDefaultRealm。这个将在你为URL指定一个默认的用户名和密码。这将在你为特定realm提供一个其他组合时</p>
<p>得到提供。我们通过给realm参数指定None提供给add_password来指示这种情况。</p>
<p>&nbsp;</p>
<p>最高层次的URL是第一个要求验证的URL。你传给.add_password()更深层次的URLs将同样合适。</p>
<p>&nbsp;</p>
<p>[python:nogutter]&nbsp;<br />
# 创建一个密码管理者&nbsp;<br />
&nbsp;<br />
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
# 添加用户名和密码&nbsp;<br />
&nbsp;<br />
# 如果知道 realm, 我们可以使用他代替 &#8220;None&#8220;.&nbsp;<br />
&nbsp;<br />
top_level_url = &#8220;http://example.com/foo/&#8221;&nbsp;<br />
&nbsp;<br />
password_mgr.add_password(None, top_level_url, username, password)&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
handler = urllib2.HTTPBasicAuthHandler(password_mgr)&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
# 创建 &#8220;opener&#8221; (OpenerDirector 实例)&nbsp;<br />
&nbsp;<br />
opener = urllib2.build_opener(handler)&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
# 使用 opener 获取一个URL&nbsp;<br />
&nbsp;<br />
opener.open(a_url)&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;<br />
# 安装 opener.&nbsp;<br />
&nbsp;<br />
# 现在所有调用 urllib2.urlopen 将用我们的 opener.&nbsp;<br />
&nbsp;<br />
urllib2.install_opener(opener)&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;</p>
<p>注意：以上的例子我们仅仅提供我们的HHTPBasicAuthHandler给build_opener。默认的openers有正常状况的handlers&#8211;ProxyHandler,UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor。</p>
<p>&nbsp;<br />
top_level_url 实际上可以是完整URL(包含&#8221;http:&#8221;,以及主机名及可选的端口号)例如：http://example.com/，也可以是一个“authority”(即主机名和可选的</p>
<p>包含端口号)例如：“example.com” or “example.com:8080”(后者包含了端口号)。权限验证，如果递交的话不能包含&#8221;用户信息&#8221;部分,例如:</p>
<p>“joe@password:example.com”是错误的。<br />
Proxies代理urllib 将自动监测你的代理设置并使用他们。这个通过ProxyHandler这个在正常处理器链中的对象来处理。通常，那工作的很好。但有时不起作用</p>
<p>。其中一个方法便是安装我们自己的代理处理器ProxyHandler，并不定义代理。这个跟使用Basic Authentication 处理器很相似。</p>
<p>&nbsp;</p>
<p>[python:nogutter]&nbsp;<br />
&gt;&gt;&gt; proxy_support = urllib.request.ProxyHandler({})&nbsp;<br />
&gt;&gt;&gt; opener = urllib.request.build_opener(proxy_support)&nbsp;<br />
&gt;&gt;&gt; urllib.request.install_opener(opener)&nbsp;<br />
&nbsp;</p>
<p>注意：<br />
此时urllib.request不支持通过代理获取https地址。但，这个可以通过扩展urllib.request达到目的。<br />
Sockets and Layers<br />
Python支持获取网络资源是分层结构。urllib 使用http.client库，再调用socket库实现。</p>
<p>在Python2.3你可以指定socket的等待回应超时时间。这个在需要获取网页的应用程序里很有用。默认的socket模型没有超时和挂起。现在，socket超时没有暴露&nbsp;&nbsp;<a href="http://www.2cto.com/">www.2cto.com</a></p>
<p>给http.client或者urllib.request层。但你可以给所有的sockets设置全局的超时。</p>
<p>&nbsp;</p>
<p>作者：lmh12506</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=471</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python模块:win32com用法详解</title>
		<link>https://thetownes.coolpage.biz/?p=469</link>
		<comments>https://thetownes.coolpage.biz/?p=469#comments</comments>
		<pubDate>Thu, 01 Aug 2013 03:40:51 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[win32com]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=469</guid>
		<description><![CDATA[1）安装 （2）处理word 使用技巧 import win32com from &#8230; <a href="https://thetownes.coolpage.biz/?p=469">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>1）安装</p>
<p>（2）处理word</p>
<p>使用技巧</p>
<p>import win32com<br />
from win32com.client import Dispatch, constants</p>
<p>w = win32com.client.Dispatch(&#8216;Word.Application&#8217;)<br />
# 或者使用下面的方法，使用启动独立的进程：<br />
# w = win32com.client.DispatchEx(&#8216;Word.Application&#8217;)</p>
<p># 后台运行，不显示，不警告<br />
w.Visible = 0<br />
w.DisplayAlerts = 0</p>
<p># 打开新的文件<br />
doc = w.Documents.Open( FileName = filenamein )<br />
# worddoc = w.Documents.Add() # 创建新的文档</p>
<p># 插入文字<br />
myRange = doc.Range(0,0)<br />
myRange.InsertBefore(&#8216;Hello from Python!&#8217;)</p>
<p># 使用样式<br />
wordSel = myRange.Select()<br />
wordSel.Style = constants.wdStyleHeading1</p>
<p># 正文文字替换<br />
w.Selection.Find.ClearFormatting()<br />
w.Selection.Find.Replacement.ClearFormatting()<br />
w.Selection.Find.Execute(OldStr, False, False, False, False, False, True, 1, True, NewStr, 2)</p>
<p># 页眉文字替换<br />
w.ActiveDocument.Sections[0].Headers[0].Range.Find.ClearFormatting()<br />
w.ActiveDocument.Sections[0].Headers[0].Range.Find.Replacement.ClearFormatting()<br />
w.ActiveDocument.Sections[0].Headers[0].Range.Find.Execute(OldStr, False, False, False, False, False, True, 1, False, NewStr, 2)</p>
<p># 表格操作<br />
doc.Tables[0].Rows[0].Cells[0].Range.Text =&#8217;123123&#8242;<br />
worddoc.Tables[0].Rows.Add() # 增加一行</p>
<p># 转换为html<br />
wc = win32com.client.constants<br />
w.ActiveDocument.WebOptions.RelyOnCSS = 1<br />
w.ActiveDocument.WebOptions.OptimizeForBrowser = 1<br />
w.ActiveDocument.WebOptions.BrowserLevel = 0 # constants.wdBrowserLevelV4<br />
w.ActiveDocument.WebOptions.OrganizeInFolder = 0<br />
w.ActiveDocument.WebOptions.UseLongFileNames = 1<br />
w.ActiveDocument.WebOptions.RelyOnVML = 0<br />
w.ActiveDocument.WebOptions.AllowPNG = 1<br />
w.ActiveDocument.SaveAs( FileName = filenameout, FileFormat = wc.wdFormatHTML )</p>
<p># 打印<br />
doc.PrintOut()</p>
<p># 关闭<br />
# doc.Close()<br />
w.Documents.Close(wc.wdDoNotSaveChanges)<br />
w.Quit()</p>
<p>（3）处理excel</p>
<p>［1］使用PyExcelerator读写EXCEL文件(Platform: Win,Unix-like)<br />
优点：简单易用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺点：不可改变已存在的EXCEL文件。<br />
PyExcelerator是一个开源的MS Excel文件处理python包。它主要是用来写 Excel 文件.URL:&nbsp;<a href="http://sourceforge.net/projects/pyexcelerator/">http://sourceforge.net/projects/pyexcelerator/</a><br />
我没有找到关于PyExcelerator的文档。只是看到了limodou的一篇介绍：<a href="http://www.2cto.com/kf/201206/137853.html">http://www.2cto.com/kf/201206/137853.html</a></p>
<p>这个包使用起来还是比较简单的：）。带了很多小例子，可以参照。<br />
例mini.py.<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
#!/usr/bin/env python<br />
# -*- coding: windows-1251 -*-<br />
# Copyright (C) 2005 Kiseliov Roman<br />
__rev_id__ = &#8220;&#8221;"$Id: mini.py,v 1.3 2005/03/27 12:47:06 rvk Exp $&#8221;"&#8221;<br />
&#8220;导入模块<br />
from pyExcelerator import *<br />
&#8220;生成一个工作薄<br />
w = Workbook()<br />
&#8220;加入一个Sheet<br />
ws = w.add_sheet(&#8216;Hey, Dude&#8217;)<br />
&#8220;保存<br />
w.save(&#8216;mini.xls&#8217;)<br />
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
[2]使用COM接口，直接操作EXCEL(只能在Win上)<br />
优点：可以满足绝大数要求。缺点：有些麻烦。:-)<br />
这方面的例子很多，GOOGLE 看吧:-). 文档也可以参看OFFICE自带的VBA EXCEL 帮助文件(VBAXL.CHM)。这里面讲述了EXCEL VBA的<a href="http://www.2cto.com/kf" target="_blank">编程</a>概念，<br />
不错的教程！另外，《<a href="http://www.2cto.com/kf/web/Python/" target="_blank">Python</a>&nbsp;Programming on Win32》书中也有很详细的介绍。这本书中给出了一个类来操作EXCEL 文件，可以很容易的加以扩展。<br />
#!/usr/bin/env python<br />
# -*- coding: utf-8 -*-<br />
from win32com.client import Dispatch<br />
import win32com.client<br />
class easyExcel:<br />
&nbsp;&nbsp;&nbsp; &#8220;&#8221;"A utility to make it easier to get at Excel.&nbsp; Remembering<br />
&nbsp;&nbsp;&nbsp; to save the data is your problem, as is&nbsp; error handling.<br />
&nbsp;&nbsp;&nbsp; Operates on one workbook at a time.&#8221;"&#8221;<br />
&nbsp;&nbsp;&nbsp; def __init__(self, filename=None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlApp = win32com.client.Dispatch(&#8216;Excel.Application&#8217;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if filename:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.filename = filename<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook = self.xlApp.Workbooks.Open(filename)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook = self.xlApp.Workbooks.Add()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.filename = &#8221;&nbsp;<br />
&nbsp;&nbsp;&nbsp; def save(self, newfilename=None):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if newfilename:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.filename = newfilename<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook.SaveAs(newfilename)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook.Save()&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; def close(self):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.xlBook.Close(SaveChanges=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; del self.xlApp<br />
&nbsp;&nbsp;&nbsp; def getCell(self, sheet, row, col):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;Get value of one cell&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht = self.xlBook.Worksheets(sheet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sht.Cells(row, col).Value<br />
&nbsp;&nbsp;&nbsp; def setCell(self, sheet, row, col, value):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;set value of one cell&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht = self.xlBook.Worksheets(sheet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht.Cells(row, col).Value = value<br />
&nbsp;&nbsp;&nbsp; def getRange(self, sheet, row1, col1, row2, col2):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;return a 2d array (i.e. tuple of tuples)&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht = self.xlBook.Worksheets(sheet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sht.Range(sht.Cells(row1, col1), sht.Cells(row2, col2)).Value<br />
&nbsp;&nbsp;&nbsp; def addPicture(self, sheet, pictureName, Left, Top, Width, Height):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;Insert a picture in sheet&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht = self.xlBook.Worksheets(sheet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sht.Shapes.AddPicture(pictureName, 1, 1, Left, Top, Width, Height)<br />
&nbsp;&nbsp;&nbsp; def cpSheet(self, before):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;copy sheet&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shts = self.xlBook.Worksheets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shts(1).Copy(None,shts(1))<br />
&#8220;下面是一些测试代码。<br />
if __name__ == &#8220;__main__&#8221;:<br />
&nbsp;&nbsp;&nbsp; PNFILE = r&#8217;c:\screenshot.bmp&#8217;<br />
&nbsp;&nbsp;&nbsp; xls = easyExcel(r&#8217;D:\test.xls&#8217;)<br />
&nbsp;&nbsp;&nbsp; xls.addPicture(&#8216;Sheet1&#8242;, PNFILE, 20,20,1000,1000)<br />
&nbsp;&nbsp;&nbsp; xls.cpSheet(&#8216;Sheet1&#8242;)<br />
&nbsp;&nbsp;&nbsp; xls.save()<br />
&nbsp;&nbsp;&nbsp; xls.close()</p>
<p>（4）python调用短信猫控件，发短信</p>
<p>#! /usr/bin/env python</p>
<p>#coding=gbk<br />
import sys<br />
import win32com.client<br />
ocxname=&#8217;ShouYan_SmsGate61.Smsgate&#8217;<br />
axocx=win32com.client.Dispatch(ocxname)<br />
axocx.CommPort=8#设置COM端口号<br />
axocx.SmsService=&#8217;+8613800100500&#8242;#设置短信服务号码<br />
axocx.Settings=&#8217;9600,n,8,1&#8242;#设置com端口速度<br />
axocx.sn=&#8217;loyin&#8217;<br />
c=axocx.Connect(1)#连接短信猫或手机<br />
&nbsp;<br />
print &#8216;连接情况&#8217;,axocx.Link()<br />
&nbsp;<br />
axocx.SendSms(&#8216;python确实是很好的&#8217;,&#8217;15101021000&#8242;,0)#发送短信</p>
<p>&nbsp;作者：木雨山</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=469</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python去除String中的空格/换行/回车等</title>
		<link>https://thetownes.coolpage.biz/?p=466</link>
		<comments>https://thetownes.coolpage.biz/?p=466#comments</comments>
		<pubDate>Thu, 01 Aug 2013 03:38:48 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[去除空格换行回车]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=466</guid>
		<description><![CDATA[join:在序列中添加元素 split: 将字符串分解成序列 两者为互逆方法 P &#8230; <a href="https://thetownes.coolpage.biz/?p=466">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>join:在序列中添加元素<br />
split: 将字符串分解成序列<br />
两者为互逆方法</p>
<p><a href="http://www.2cto.com/kf/web/Python/" target="_blank">Python</a>代码&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; s = &#8220;as, asdas \r\nasda&#8221;&nbsp;<br />
&nbsp;&nbsp;&nbsp; print s.split();&nbsp;<br />
#&nbsp;&nbsp; result: ['as,', 'asdas', 'asda']&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; print &#8220;&#8221;.join(s.split());&nbsp;<br />
#&nbsp;&nbsp;&nbsp; result: as,asdasasda&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; l = &#8220;&#8221;.join(s.split()).split(&#8216;,&#8217;);&nbsp;<br />
&nbsp;&nbsp;&nbsp; print l;&nbsp;<br />
#&nbsp;&nbsp; result: ['as', 'asdasasda']&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=466</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows下python环境变量配置</title>
		<link>https://thetownes.coolpage.biz/?p=182</link>
		<comments>https://thetownes.coolpage.biz/?p=182#comments</comments>
		<pubDate>Thu, 11 Jul 2013 09:02:50 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Windows下]]></category>
		<category><![CDATA[环境变量配置]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=182</guid>
		<description><![CDATA[默认情况下，在windows下安装python之后，系统并不会自动添加相应的环境 &#8230; <a href="https://thetownes.coolpage.biz/?p=182">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>默认情况下，在windows下安装python之后，系统并不会自动添加相应的环境变量。此时不能在命令行直接使用python命令。</p>
<p>&nbsp;</p>
<p>1. 首先需要在系统中注册python环境变量：假设python的安装路径为c:python2.6，则修改我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中的PATH为:</p>
<p>(为了在命令行模式下运行Python命令，需要将python.exe所在的目录附加到PATH这个环境变量中。)</p>
<p>&nbsp;</p>
<div>
<pre>PATH=PATH;c:python26</pre>
</div>
<p>上述环境变量设置成功之后，就可以在命令行直接使用python命令。或执行”python *.py”运行python脚本了。</p>
<p>&nbsp;</p>
<p>2. 此时，还是只能通过”python *.py”运行python脚本，若希望直接运行*.py，只需再修改另一个环境变量PATHEXT:</p>
<p>&nbsp;</p>
<div>
<pre>PATHEXT=PATHEXT;.PY;.PYM</pre>
</div>
<p><em>&nbsp;</em></p>
<p>3. 另外，在使用python的过程中，可能需要经常查看某个命令的帮助文档，如使用help(‘print’)查看print命令的使用说明。默认安装的python无法查看帮助文档，尚需进行简单的配置：</p>
<p>在python安装目录下，找到python25.chm，使用</p>
<p>&nbsp;</p>
<div>
<pre>hh -decompile .python26.chm</pre>
</div>
<p>将其反编译出来，然后将其所在的目录加入到上面提到的PATH环境变量中即可。</p>
<p>&nbsp;</p>
<p>4.&nbsp;如何使Python解释器能直接import默认安装路径以外的第三方模块？</p>
<p>为了能import默认安装路径以外的第三方的模块（如自己写的模块），需要新建PYTHONPATH环境变量，值为这个模块所在的目录。</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=182</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>py2exe</title>
		<link>https://thetownes.coolpage.biz/?p=164</link>
		<comments>https://thetownes.coolpage.biz/?p=164#comments</comments>
		<pubDate>Wed, 10 Jul 2013 14:52:59 +0000</pubDate>
		<dc:creator>Will</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[py2exe]]></category>

		<guid isPermaLink="false">http://thetownes.coolpage.biz/?p=164</guid>
		<description><![CDATA[一、简介 py2exe是一个将python脚本转换成windows上的可独立执行 &#8230; <a href="https://thetownes.coolpage.biz/?p=164">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong>一、简介</strong></p>
<p>py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具，这样，你就可以不用装python而在windows系统上运行这个可执行程序。</p>
<p>py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com&nbsp;client和server,和其它的独立程序。py2exe是发布在开源许可证下的。</p>
<p><strong>二、安装py2exe</strong></p>
<p>从<a href="http://prdownloads.sourceforge.net/py2exe" target="_blank">http://prdownloads.sourceforge.net/py2exe</a>下载并运行与你所安装的Python对应的py2exe版本的installer，这将安装py2exe和相应的例子；这些例子被安装在libsite-packagespy2exesamples目录下。</p>
<p><strong>三、py2exe的用法</strong></p>
<p>如果你有一个名为helloworld.py的python脚本，你想把它转换为运行在windows上的可执行程序，并运行在没有安装python的windows系统上，那么首先你应写一个用于发布程序的设置脚本例如mysetup.py，在其中的setup函数前插入语句import&nbsp;py2exe&nbsp;。</p>
<p>mysetup.py示例如下:</p>
<p>#&nbsp;mysetup.py</p>
<p>from&nbsp;distutils.core&nbsp;import&nbsp;setup</p>
<p>import&nbsp;py2exe</p>
<p>setup(console=["helloworld.py"])</p>
<p><strong>然后按下面的方法运行mysetup.py:</strong></p>
<p><strong>python&nbsp;mysetup.py&nbsp;py2exe</strong></p>
<p><strong></strong>这很重要，你可以用命令行打开<strong>mysetup.py （cd XXX）</strong>和你要做成exe的目录，然后使用这个命令。</p>
<p>然后在目录（<strong>mysetup.py&nbsp;</strong>必须和你要做成的文件放一块儿。。）建立记事本，输入&nbsp;python&nbsp;mysetup.py&nbsp;py2exe，然后另存为Setup.bat。然后下次再要建立时便只要修改mysetup.py了。</p>
<p>上面的命令执行后将产生一个名为dist的子目录，其中包含了helloworld.exe,python24.dll,library.zip这些文件。</p>
<p>如果你的helloworld.py脚本中用了已编译的C扩展模块，那么这些模块也会被拷贝在个子目录中，同样，所有的dll文件在运行时都是需要的，除了系统的dll文件。</p>
<p>dist子目录中的文件包含了你的程序所必须的东西，你应将这个子目录中的所有内容一起发布。</p>
<p>默认情况下，py2exe在目录dist下创建以下这些必须的文件：</p>
<p>1、一个或多个exe文件。</p>
<p>2、python##.dll。</p>
<p>3、几个.pyd文件，它们是已编译的扩展名，它们是exe文件所需要的；加上其它的.dll文件，这些.dll是.pyd所需要的。</p>
<p>4、一个library.zip文件，它包含了已编译的纯的python模块如.pyc或.pyo</p>
<p>上面的mysetup.py创建了一个控制台的helloword.exe程序，如果你要创建一个图形用户界的程序，那么你只需要将mysetup.py中的console=["helloworld.py"]替换为windows=["myscript.py"]既可。</p>
<p>py2exe一次能够创建多个exe文件，你需要将这些脚本文件的列表传递给console或windows的关键字参数。如果你有几个相关联的脚本，那么这是很有用的。</p>
<p>运行下面个命令，将显示py2exe命令的所有命令行标记。</p>
<p>python&nbsp;mysetup.py&nbsp;py2exe&nbsp;–help</p>
<p><strong>四、指定额外的文件</strong></p>
<p>一些应用程序在运行时需要额外的文件，诸如配置文件、字体、位图。</p>
<p>如果在安装脚本中用data_files可选项指定了那些额外的文件，那么py2exe能将这些文件拷贝到dist子目录中。data_files应包含一个元组(target-dir,&nbsp;files)列表，其中的files是这些额外的文件的列表。</p>
<p>示例如下：</p>
<p>#&nbsp;mysetup.py</p>
<p>from&nbsp;distutils.core&nbsp;import&nbsp;setup</p>
<p>import&nbsp;glob</p>
<p>import&nbsp;py2exe</p>
<p>setup(console=["helloworld.py"],</p>
<p>data_files=[("bitmaps",</p>
<p>["bm/large.gif",&nbsp;"bm/small.gif"]),</p>
<p>(“fonts”,</p>
<p>glob.glob(“fonts\*.fnt”))],</p>
<p>)</p>
<p>说明：data_files选项将创建一个子目录distbitmaps，其中包含两个.gif文件；一个子目录distfonts，其中包含了所有的.fnt文件。</p>
<p><strong>五、Windows&nbsp;NT&nbsp;services</strong></p>
<p>你可以通过传递一个service关键字参数给setup函数来建造Windows&nbsp;NT&nbsp;services</p>
<p>,这个service参数的值必须是一个Python模块名(包含一service类)的列表。</p>
<p>示例如下：</p>
<p>#&nbsp;mysetup.py</p>
<p>from&nbsp;distutils.core&nbsp;import&nbsp;setup</p>
<p>import&nbsp;py2exe</p>
<p>setup(service=["MyService"])</p>
<p>所建造的可执行的service是可以通过在其后跟一定的命令行参数标记来自行安装和卸载的。你可以通过在这个可执行的service(exe)后跟一-help参数来得到更多的帮助。</p>
<p><strong>六、COM&nbsp;servers</strong></p>
<p>你可以通过传递一个com_server&nbsp;关键字参数给setup函数来建造Windows&nbsp;NT&nbsp;services</p>
<p>,这个service参数的值必须是一个Python模块名(包含一个或多个COM&nbsp;server&nbsp;类)的列表。</p>
<p>示例如下：</p>
<p>#&nbsp;mysetup.py</p>
<p>from&nbsp;distutils.core&nbsp;import&nbsp;setup</p>
<p>import&nbsp;py2exe</p>
<p>setup(com_server=["win32com.server.interp"])</p>
<p>默认情况下，DLL和EXE&nbsp;servers被建造，你不需要它们的话你可以简单的删除它们。</p>
]]></content:encoded>
			<wfw:commentRss>https://thetownes.coolpage.biz/?feed=rss2&#038;p=164</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
