<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_钱李峰的博客</title><subtitle type="text">坚持不懈</subtitle><id>http://feed.cnblogs.com/blog/u/64655/rss</id><updated>2012-05-15T16:43:13Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/64655/rss"/><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/05/15/2501667.html</id><title type="text">使用动态编译验证用户输入合法性</title><summary type="text">利用动态编译特性为验证规则提供方便的定值特性。</summary><published>2012-05-15T07:27:00Z</published><updated>2012-05-15T07:27:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/05/15/2501667.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/05/15/2501667.html"/><content type="html">&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;需求描述：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;现在一个页面有4个输入框，每个输入框都绑定有一个验证规则。要求在用户输入完毕后根据每个输入的规则对用户输入进行验证。而且这些验证规则是用户在后台可以动态更改的。如下图所示：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="center"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201205/201205151526538369.png" alt="" /&gt;&lt;/div&gt;&lt;div align="center"&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="left"&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;最初的想法：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我们最初的想法使用正则表达式实现。后台数据库中只要存储验证的正则表达式就行了。需要验证的时候，从后台数据库中取得对应的正则表达式即可。想法很好，就是真正到了实现的时候有点问题。比如上图中的第一个要求如果使用正则表达式来实现就会比较复杂，在网上查了一些资料也没有发现比较通用的能够检测数字范围的正则表达式。最要命的是上面第一个是可以更改的，如果用户突然哪一天更改为：&amp;gt;34.5 &amp;amp;&amp;amp; &amp;lt; 999999.9 那这个正则又该怎么写呢？目前还没有找到一个比较通用的验证数字范围的正则表达式。所以这种不可行。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;不过上面有一点肯定的是，将验证规则提取到数据库中达到可配置这个是一定的，只是现在缺少一种行之有效并且简单的表达式。表达式啊表达式...突然想到lambda表达式不也是一种表达式么，如果如果让他来进行类似于范围判断的话也会简单很多。例如，如果要进行上面的范围判断可以写成：o=&amp;gt; o &amp;gt;100 &amp;amp;&amp;amp; o &amp;lt; 499，比正则表达式不知道高到哪里去了。现在需要考虑的问题就是如何让后台代码从数据库中取出这段lambda表达式，并且能够成功执行返回结果。自然而然的想到了动态编译这个词，只要能够动态编译这些代码片段，那么就能执行并返回结果了。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;动态编译c#代码&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;初步的想法有了，下面就是验证其是否可行了。google了一番动态编译c#代码，在园子里面搜索到这篇文章&lt;a href="http://www.cnblogs.com/jailu/archive/2007/07/22/827058.html"&gt;http://www.cnblogs.com/jailu/archive/2007/07/22/827058.html&lt;/a&gt;&amp;nbsp;。很详细的教程，在这里谢谢作者。作者给出的代码显然还不能直接用到我们这里。我们需要的接口应该是这样的 bool Validate(string lambda, string userInput); 第一个参数是从数据库取出的lambda表达式字符串，第二个参数是用户输入的需要进行验证的值。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        static bool validateInput(string lambda, string input)&lt;br/&gt;        {&lt;br/&gt;            // 1.CSharpCodePrivoder&lt;br/&gt;            CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(new Dictionary&amp;lt;string, string&amp;gt;() { { "CompilerVersion", "v3.5" } });&lt;br/&gt;            // 2.ICodeComplier&lt;br/&gt;            ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();&lt;br/&gt;            // 3.CompilerParameters&lt;br/&gt;            CompilerParameters objCompilerParameters = new CompilerParameters();&lt;br/&gt;            objCompilerParameters.ReferencedAssemblies.Add("System.dll");&lt;br/&gt;            objCompilerParameters.ReferencedAssemblies.Add("System.Core.dll");&lt;br/&gt;            objCompilerParameters.ReferencedAssemblies.Add("System.Xml.Linq.dll");&lt;br/&gt;            objCompilerParameters.GenerateExecutable = false;&lt;br/&gt;            objCompilerParameters.GenerateInMemory = false;&lt;br/&gt;            // 4.CompilerResults&lt;br/&gt;            CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode(lambda, input));&lt;br/&gt;&lt;br/&gt;            if (cr.Errors.HasErrors)&lt;br/&gt;            {&lt;br/&gt;                Console.WriteLine("编译错误：");&lt;br/&gt;                foreach (CompilerError err in cr.Errors)&lt;br/&gt;                {&lt;br/&gt;                    Console.WriteLine(err.ErrorText);&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;            else&lt;br/&gt;            {&lt;br/&gt;                Assembly objAssembly = cr.CompiledAssembly;&lt;br/&gt;                object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.DynamicValidate");&lt;br/&gt;                MethodInfo objMI = objHelloWorld.GetType().GetMethod("Validate");&lt;br/&gt;&lt;br/&gt;                return (bool)objMI.Invoke(objHelloWorld, null);&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            return false;&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;通过CompileAssemblyFromSource这个方法就能动态编译代码了。因为需要用到lambda表达式，所以在创建CSharpCodeProvider的时候指定编译器的版本为3.5的。编译完了之后，可以通过反射进行调用相应的动态编译的方法。在本例中，我们需要重点注意的还是怎么样构造一个可以执行lambda表达式的代码片段。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        static string GenerateCode(string lambda, string input)&lt;br/&gt;        {&lt;br/&gt;            StringBuilder sb = new StringBuilder();&lt;br/&gt;            sb.Append("using System;");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("namespace DynamicCodeGenerate");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("{");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("    public class DynamicValidate");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("    {");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("        public delegate TResult Func&amp;lt;T, TResult&amp;gt;(T arg);");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("        public bool Validates(Func&amp;lt;string, bool&amp;gt; f)");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("        {");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("              return f(\"" + input + "\");");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("        }");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("        public bool Validate()");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("        {");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("              return Validates(" + lambda + ");");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("        }");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("    }");&lt;br/&gt;            sb.Append(Environment.NewLine);&lt;br/&gt;            sb.Append("}");&lt;br/&gt;&lt;br/&gt;            string code = sb.ToString();&lt;br/&gt;            Console.WriteLine(code);&lt;br/&gt;            Console.WriteLine();&lt;br/&gt;&lt;br/&gt;            return code;&lt;br/&gt;        }&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;可以看到，我声明了一个Validates方法，这个方法接受一个委托Func。输入是字符串，返回值是bool。然后再声明一个Vlidate调用Validates方法并传入lambda。通过这样的方式就可以成功动态编译并执行我们指定的lambda表达式了。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;关于效率&lt;/div&gt;&lt;p&gt;　这段代码既用到动态编译，又用到反射效率上肯定不是太高。不过灵活性和效率向来就很难兼得。如果还有其他更好的兼得的方法欢迎不吝赐教！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2501667.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/05/15/2501667.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/05/10/2494005.html</id><title type="text">python设置windows桌面壁纸</title><summary type="text">利用python设置桌面壁纸</summary><published>2012-05-10T03:25:00Z</published><updated>2012-05-10T03:25:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/05/10/2494005.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/05/10/2494005.html"/><content type="html">&lt;div&gt;每天换一个壁纸，每天好心情。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;code&gt;&lt;div style="BORDER-BOTTOM: black 1px solid; TEXT-ALIGN: left; BORDER-LEFT: black 1px solid; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: window; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; FONT-FAMILY: Courier New; COLOR: black; MARGIN-LEFT: auto; FONT-SIZE: 12px; BORDER-TOP: black 1px solid; MARGIN-RIGHT: auto; BORDER-RIGHT: black 1px solid; PADDING-TOP: 3px"&gt;&lt;font color=#008000&gt;# -*- coding: UTF-8 -*-&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;from&lt;/b&gt;&lt;/font&gt; __future__ &lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; unicode_literals&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; Image&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; datetime&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; win32gui,win32con,win32api&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; re&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;from&lt;/b&gt;&lt;/font&gt; HttpWrapper &lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; SendRequest&lt;br&gt;&lt;br&gt;StoreFolder &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#ff00bf&gt;"c:\\dayImage"&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; setWallpaperFromBMP(imagepath)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;k &lt;font color=#333399&gt;=&lt;/font&gt; win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,&lt;font color=#ff00bf&gt;"Control Panel\\Desktop"&lt;/font&gt;,&lt;font color=#6e00aa&gt;0&lt;/font&gt;,win32con.KEY_SET_VALUE)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win32api.RegSetValueEx(k, &lt;font color=#ff00bf&gt;"WallpaperStyle"&lt;/font&gt;, &lt;font color=#6e00aa&gt;0&lt;/font&gt;, win32con.REG_SZ, &lt;font color=#ff00bf&gt;"2"&lt;/font&gt;) &lt;font color=#008000&gt;#2拉伸适应桌面,0桌面居中&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win32api.RegSetValueEx(k, &lt;font color=#ff00bf&gt;"TileWallpaper"&lt;/font&gt;, &lt;font color=#6e00aa&gt;0&lt;/font&gt;, win32con.REG_SZ, &lt;font color=#ff00bf&gt;"0"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER,imagepath, &lt;font color=#6e00aa&gt;1&lt;/font&gt;&lt;font color=#333399&gt;+&lt;/font&gt;&lt;font color=#6e00aa&gt;2&lt;/font&gt;)&lt;br&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; setWallPaper(imagePath)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Given a path to an image, convert it to bmp and set it as wallpaper&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bmpImage &lt;font color=#333399&gt;=&lt;/font&gt; Image.&lt;font color=#0000ff&gt;&lt;b&gt;open&lt;/b&gt;&lt;/font&gt;(imagePath)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newPath &lt;font color=#333399&gt;=&lt;/font&gt; StoreFolder &lt;font color=#333399&gt;+&lt;/font&gt; &lt;font color=#ff00bf&gt;'\\mywallpaper.bmp'&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bmpImage.save(newPath, &lt;font color=#ff00bf&gt;"BMP"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setWallpaperFromBMP(newPath)&lt;br&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; getPicture()&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#ff00bf&gt;"http://photography.nationalgeographic.com/photography/photo-of-the-day/"&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h &lt;font color=#333399&gt;=&lt;/font&gt; SendRequest(url)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; h.GetSource()&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r &lt;font color=#333399&gt;=&lt;/font&gt; re.findall(&lt;font color=#ff00bf&gt;'&amp;lt;div class="download_link"&amp;gt;&amp;lt;a href="(.*?)"&amp;gt;Download'&lt;/font&gt;,h.GetSource())&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; r&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; SendRequest(r[&lt;font color=#6e00aa&gt;0&lt;/font&gt;]).GetSource()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;print&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;"解析图片地址出错，请检查正则表达式是否正确"&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; setWallpaperOfToday()&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;img &lt;font color=#333399&gt;=&lt;/font&gt; getPicture()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; img&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;path &lt;font color=#333399&gt;=&lt;/font&gt; StoreFolder &lt;font color=#333399&gt;+&lt;/font&gt; &lt;font color=#ff00bf&gt;"\\%s.jpg"&lt;/font&gt; &lt;font color=#333399&gt;%&lt;/font&gt; datetime.date.today()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;open&lt;/b&gt;&lt;/font&gt;(path,&lt;font color=#ff00bf&gt;"wb"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.write(img)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.close()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setWallPaper(path)&lt;br&gt;&lt;br&gt;setWallpaperOfToday()&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;print&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'Wallpaper set ok!'&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;其中的httpwrapper是我写的一个http访问的封装：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;div style="BORDER-BOTTOM: black 1px solid; TEXT-ALIGN: left; BORDER-LEFT: black 1px solid; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: window; PADDING-LEFT: 3px; PADDING-RIGHT: 3px; FONT-FAMILY: Courier New; COLOR: black; MARGIN-LEFT: auto; FONT-SIZE: 12px; BORDER-TOP: black 1px solid; MARGIN-RIGHT: auto; BORDER-RIGHT: black 1px solid; PADDING-TOP: 3px"&gt;&lt;font color=#008000&gt;#!/usr/bin/env python&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;font color=#008000&gt;# -*- coding: UTF-8 -*-&lt;/font&gt;&lt;br&gt;&lt;font color=#008000&gt;#-------------------------------------------------------------------------------&lt;/font&gt;&lt;br&gt;&lt;font color=#008000&gt;# Name: 对http访问的封装&lt;/font&gt;&lt;br&gt;&lt;font color=#008000&gt;#&lt;/font&gt;&lt;br&gt;&lt;font color=#008000&gt;# Author: qianlifeng&lt;/font&gt;&lt;br&gt;&lt;font color=#008000&gt;#&lt;/font&gt;&lt;br&gt;&lt;font color=#008000&gt;# Created: 10-02-2012&lt;/font&gt;&lt;br&gt;&lt;font color=#008000&gt;#-------------------------------------------------------------------------------&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; base64&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;urllib&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; urllib2&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; time&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; re&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;import&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;sys&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; SendRequest&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;网页请求增强类&lt;br&gt;&amp;nbsp;&amp;nbsp;SendRequest('http://xxx.com',data=dict, type='POST', auth='base',user='xxx', password='xxx')&lt;br&gt;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;__init__&lt;/b&gt;&lt;/font&gt;(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;, url, data&lt;font color=#333399&gt;=&lt;/font&gt;&lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;, method&lt;font color=#333399&gt;=&lt;/font&gt;&lt;font color=#ff00bf&gt;'GET'&lt;/font&gt;, auth&lt;font color=#333399&gt;=&lt;/font&gt;&lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;, user&lt;font color=#333399&gt;=&lt;/font&gt;&lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;, password&lt;font color=#333399&gt;=&lt;/font&gt;&lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;, cookie &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;, &lt;font color=#333399&gt;**&lt;/font&gt;header)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url: 请求的url，不能为空&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;date: 需要post的内容，必须是字典&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;method: Get 或者 Post，默认为Get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;auth: 'base' 或者 'cookie'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user: 用于base认证的用户名&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;password: 用于base认证的密码&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cookie: 请求附带的cookie，一般用于登录后的认证&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;其他头信息:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.g. referer='www.sina.com.cn'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.url &lt;font color=#333399&gt;=&lt;/font&gt; url&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.data &lt;font color=#333399&gt;=&lt;/font&gt; data&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.method &lt;font color=#333399&gt;=&lt;/font&gt; method&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.auth &lt;font color=#333399&gt;=&lt;/font&gt; auth&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.user &lt;font color=#333399&gt;=&lt;/font&gt; user&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.password &lt;font color=#333399&gt;=&lt;/font&gt; password&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.cookie &lt;font color=#333399&gt;=&lt;/font&gt; cookie&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'referer'&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; header&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.referer &lt;font color=#333399&gt;=&lt;/font&gt; header[referer]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.referer &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'user-agent'&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; header&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.user_agent &lt;font color=#333399&gt;=&lt;/font&gt; header[user&lt;font color=#333399&gt;-&lt;/font&gt;agent]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&lt;font color=#008000&gt;## self.user_agent = 'Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0'&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.user_agent &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#ff00bf&gt;'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16'&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.__SetupRequest()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.__SendRequest()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; __SetupRequest(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.url &lt;font color=#0000ff&gt;&lt;b&gt;is&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;or&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.url &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#ff00bf&gt;''&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'url 不能为空!'&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008000&gt;#访问方式设置&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.method.lower() &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#ff00bf&gt;'post'&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Req &lt;font color=#333399&gt;=&lt;/font&gt; urllib2.Request(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.url, &lt;font color=#0000ff&gt;&lt;b&gt;urllib&lt;/b&gt;&lt;/font&gt;.urlencode(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.data))&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;elif&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.method.lower() &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#ff00bf&gt;'get'&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.data &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Req &lt;font color=#333399&gt;=&lt;/font&gt; urllib2.Request(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.url)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Req &lt;font color=#333399&gt;=&lt;/font&gt; urllib2.Request(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.url &lt;font color=#333399&gt;+&lt;/font&gt; &lt;font color=#ff00bf&gt;'?'&lt;/font&gt; &lt;font color=#333399&gt;+&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;urllib&lt;/b&gt;&lt;/font&gt;.urlencode(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.data))&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008000&gt;#设置认证信息&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.auth &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#ff00bf&gt;'base'&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.user &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;or&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.password &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'The user or password was not given!'&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;auth_info &lt;font color=#333399&gt;=&lt;/font&gt; base64.encodestring(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.user &lt;font color=#333399&gt;+&lt;/font&gt; &lt;font color=#ff00bf&gt;':'&lt;/font&gt; &lt;font color=#333399&gt;+&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.password).replace(&lt;font color=#ff00bf&gt;'\n'&lt;/font&gt;,&lt;font color=#ff00bf&gt;''&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;auth_info &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#ff00bf&gt;'Basic '&lt;/font&gt; &lt;font color=#333399&gt;+&lt;/font&gt; auth_info&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Req.add_header(&lt;font color=#ff00bf&gt;"Authorization"&lt;/font&gt;, auth_info)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;elif&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.auth &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#ff00bf&gt;'cookie'&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.cookie &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'The cookie was not given!'&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Req.add_header(&lt;font color=#ff00bf&gt;"Cookie"&lt;/font&gt;, &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.cookie)&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.referer&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Req.add_header(&lt;font color=#ff00bf&gt;'referer'&lt;/font&gt;, &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.referer)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.user_agent&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Req.add_header(&lt;font color=#ff00bf&gt;'user-agent'&lt;/font&gt;, &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.user_agent)&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; __SendRequest(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Res &lt;font color=#333399&gt;=&lt;/font&gt; urllib2.urlopen(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Req)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.source &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Res.read()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.code &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Res.getcode()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Res.info().dict&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.Res.close()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;except&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;print&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;"Error: HttpWrapper=&amp;gt;_SendRequest "&lt;/font&gt;, &lt;font color=#0000ff&gt;&lt;b&gt;sys&lt;/b&gt;&lt;/font&gt;.exc_info()[&lt;font color=#6e00aa&gt;1&lt;/font&gt;]&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; GetResponseCode(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到服务器返回的状态码(200表示成功,404网页不存在)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.code&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; GetSource(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到网页源代码，需要解码后在使用&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;"source"&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;dir&lt;/b&gt;&lt;/font&gt;(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.source&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; u&lt;font color=#ff00bf&gt;''&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; GetHeaderInfo(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u'得到响应头信息'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; GetCookie(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到服务器返回的Cookie，一般用于登录后续操作&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'set-cookie'&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict[&lt;font color=#ff00bf&gt;'set-cookie'&lt;/font&gt;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; GetContentType(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到返回类型&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'content-type'&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict[&lt;font color=#ff00bf&gt;'content-type'&lt;/font&gt;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; GetCharset(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;尝试得到网页的编码&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果得不到返回None&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contentType &lt;font color=#333399&gt;=&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.GetContentType()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; contentType &lt;font color=#0000ff&gt;&lt;b&gt;is&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;not&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index &lt;font color=#333399&gt;=&lt;/font&gt; contentType.&lt;font color=#0000ff&gt;&lt;b&gt;find&lt;/b&gt;&lt;/font&gt;(&lt;font color=#ff00bf&gt;"charset"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; index &lt;font color=#333399&gt;&amp;gt;&lt;/font&gt; &lt;font color=#6e00aa&gt;0&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; contentType[index&lt;font color=#333399&gt;+&lt;/font&gt;&lt;font color=#6e00aa&gt;8&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; GetExpiresTime(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到网页过期时间&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'expires'&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict[&lt;font color=#ff00bf&gt;'expires'&lt;/font&gt;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; GetServerName(&lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;)&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;font color=#ff00bf&gt;"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到服务器名字&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/font&gt;&lt;font color=#ff00bf&gt;""&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#ff00bf&gt;'server'&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;self&lt;/b&gt;&lt;/font&gt;.head_dict[&lt;font color=#ff00bf&gt;'server'&lt;/font&gt;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;None&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;__all__ &lt;font color=#333399&gt;=&lt;/font&gt; [SendRequest,]&lt;br&gt;&lt;br&gt;&lt;font color=#0000ff&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color=#0000ff&gt;&lt;b&gt;__name__&lt;/b&gt;&lt;/font&gt; &lt;font color=#333399&gt;==&lt;/font&gt; &lt;font color=#ff00bf&gt;'__main__'&lt;/font&gt;&lt;font color=#333399&gt;:&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b &lt;font color=#333399&gt;=&lt;/font&gt; SendRequest(&lt;font color=#ff00bf&gt;"http://www.baidu.com"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;&lt;b&gt;print&lt;/b&gt;&lt;/font&gt; b.GetSource()&lt;/div&gt;&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2494005.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/05/10/2494005.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/03/28/2422124.html</id><title type="text">EasyVS 0.3版本发布 -- 给力变换vs编辑器主题</title><summary type="text">EasyVS--VS插件0.3版本发布。增加了编辑器主题更换等5项新功能，欢迎大家使用。</summary><published>2012-03-28T13:48:00Z</published><updated>2012-03-28T13:48:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/03/28/2422124.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/03/28/2422124.html"/><content type="html">&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;之前版本介绍&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/01/09/2317625.html"&gt;http://www.cnblogs.com/qianlifeng/archive/2012/01/09/2317625.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;0.3版本&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="color: #0000ff; font-size: 15px;"&gt;下载：&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #0000ff;"&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/7310649d-87d9-45d2-b7da-99e5b001549e"&gt;&lt;span style="color: #0000ff;"&gt;http://visualstudiogallery.msdn.microsoft.com/7310649d-87d9-45d2-b7da-99e5b001549e&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;距离上次发布0.2版本也快三个多月了，这次的0.3版本增加了一些实用的功能。具体介绍如下：&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 黑体; font-size: 16px;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;增加主题功能 (内置7种不同风格主题)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203282148034277.png" alt="" align="baseline" border="0" hspace="0" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;主题功能是这个版本的亮点。我收集了七个比较流行的编辑器主题样式，有了这个功能再也不用到网上寻找安装这样那样的主题了。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="color: #ff0000; font-size: 16px;"&gt;增加文件右键&amp;ldquo;在资源管理器中打开&amp;rdquo;功能&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/20120328214803656.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;我们知道VS2010对文件夹支持&amp;ldquo;在资源管理器中打开&amp;rdquo;的功能，而对于普通的代码文件则没有这个功能。每次如果想用资源管理器打开对应的代码文件都很麻烦。所以这一版加入了直接对代码文件用资源管理器打开的功能（据同事反馈，这个功能比较实用^_^）。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;新建的文件自动头信息功能（可关闭）&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/20120328214804589.png" alt="" align="baseline" border="0" hspace="0" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203282148044493.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;这种自动添加文件头信息，作者信息的功能网上有许多的实现方法，比如直接修改模板文件。加入这个功能只是为了简化实现这个操作的步骤。直接在设置里面更改就有效果了，而且还可以自己选择是否关闭。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;增加克隆选中文本功能 (Ctrl + E, Ctrl + E)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;这个功能是仿照Resharper的ctrl+d功能实现的，使用Resharper的同学肯不定不陌生。具体的使用方法就是按快捷键Ctrl+E,Ctrl+E后会对选中的文本克隆到下面一行，如果没有选中则克隆鼠标所在那一行的文本到下一行。比如：我先选中两行文本&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203282148043621.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;然后快捷键Ctrl + E, Ctrl + E，变成如下效果：&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203282148041113.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;引入这个功能是因为我觉得平常用的蛮多的，可能会对大家有一些帮助，特别是那些没有使用resharper插件的同学。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;增加&amp;ldquo;重启&amp;rdquo;功能&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/20120328214804556.png" alt="" align="baseline" border="0" hspace="0" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;至于这个功能，我只能说不管你要不要，它就在那里。总有你需要的时候。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;Bug修复&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;修复less tab的打开winform窗体出错的一个BUG&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;最后，希望各位同学能够提供使用意见，感激不尽！^_^&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2422124.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/03/28/2422124.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/03/08/2385132.html</id><title type="text">在chrome中利用“油猴”为每个网页增加“返回顶部”功能</title><summary type="text">利用“油猴”脚本可以实现为网页增加自定义脚本的功能，具体能有什么效果就看人们的想象力了....</summary><published>2012-03-08T05:46:00Z</published><updated>2012-03-08T05:46:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/03/08/2385132.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/03/08/2385132.html"/><content type="html">&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;今天在网上看到了&amp;ldquo;油猴&amp;rdquo;这么个东西的介绍，感觉蛮有趣，跟大家分享一下。这个东西本来是火狐的插件，后来一查原来chrome从4.0以后也支持用户脚本了。所谓的&amp;ldquo;油猴&amp;rdquo;实际上是一段以*.user.js结尾的js脚本，通过油猴你可以在每个网页上执行你的这段脚本。利用这个js脚本你可以对网站页面做一些个性化的修改，比如像我们今天提到在每个页面上增加&amp;ldquo;返回顶部&amp;rdquo;的功能，其效果就是在每个页面自动添加返回顶部的功能：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;效果图：&lt;/div&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203081345509823.png" alt="" /&gt;&lt;/p&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;创建&amp;ldquo;油猴&amp;rdquo;脚本&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;下面介绍一下如何在chrome中编写自己的用户脚本（以增加返回顶部功能为例）&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;1. 去谷歌扩展中心下载 &lt;a href="https://chrome.google.com/webstore/detail/dhdgffkkebhmkfjojejmpbldmpobfkfo"&gt;&lt;strong&gt;Tampermonkey&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp; ,&lt;/strong&gt;这个东西可以用来管理各种用户脚本。当然，新建一个脚本也会变得比较容易。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;2. 安装后进入Tampermonkey的设置界面，然后创建一个新的脚本：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203081345516900.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在编辑脚本页面输入下面的一段js脚本（用于实现&amp;ldquo;返回顶部&amp;rdquo;功能）&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #008000;"&gt;// ==UserScript==&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008000;"&gt;// @name GotoTop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;// @version 0.1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;// @description 给每个网页增加返回顶部按钮&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;// @match http://*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;// @match https://*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;// @copyright scott qian&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;// ==/UserScript==&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ImportCss();&lt;br /&gt;ScriptWithJquery();&lt;br /&gt;BindHotKey();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;function&lt;/strong&gt;&lt;/span&gt; ImportCss() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;var&lt;/strong&gt;&lt;/span&gt; jqueryScriptBlock &lt;span style="color: #333399;"&gt;=&lt;/span&gt; document.createElement(&lt;span style="color: #ff00bf;"&gt;'style'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jqueryScriptBlock.type &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'text/css'&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jqueryScriptBlock.innerHTML &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"#gototop{position:fixed;bottom:20%;right:1px;border:1px solid gray;padding:3px;width:12px;font-size:12px;cursor:pointer;border-radius: 3px;text-shadow: 1px 1px 3px #676767;}"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementsByTagName(&lt;span style="color: #ff00bf;"&gt;'head'&lt;/span&gt;)[&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;].appendChild(jqueryScriptBlock);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;function&lt;/strong&gt;&lt;/span&gt; ScriptWithJquery() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document.body).append(&lt;span style="color: #ff00bf;"&gt;"&amp;lt;div id='gototop' title='快捷键： alt + up alt+鼠标滚轮向上'&amp;gt; 返 回 顶 部 &amp;lt;/div&amp;gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: #ff00bf;"&gt;'#gototop'&lt;/span&gt;).click(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;function&lt;/strong&gt;&lt;/span&gt; () { $(&lt;span style="color: #ff00bf;"&gt;'html,body'&lt;/span&gt;).animate({ scrollTop&lt;span style="color: #333399;"&gt;:&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'0px'&lt;/span&gt; }, &lt;span style="color: #6e00aa;"&gt;800&lt;/span&gt;); &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; false; });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;function&lt;/strong&gt;&lt;/span&gt; BindHotKey(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.onkeydown &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;function&lt;/strong&gt;&lt;/span&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;var&lt;/strong&gt;&lt;/span&gt; a &lt;span style="color: #333399;"&gt;=&lt;/span&gt; window.event.keyCode;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt;((a &lt;span style="color: #333399;"&gt;==&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;38&lt;/span&gt;)&lt;span style="color: #333399;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;(event.altKey))&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//alt + up&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: #ff00bf;"&gt;'html,body'&lt;/span&gt;).animate({ scrollTop&lt;span style="color: #333399;"&gt;:&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'0px'&lt;/span&gt; }, &lt;span style="color: #6e00aa;"&gt;800&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//绑定alt+鼠标向上滚轮事件&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.addEventListener(&lt;span style="color: #ff00bf;"&gt;'mousewheel'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;function&lt;/strong&gt;&lt;/span&gt;(event){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt;(event.wheelDelta &lt;span style="color: #333399;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt; &lt;span style="color: #333399;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; event.altKey)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;span style="color: #ff00bf;"&gt;'html,body'&lt;/span&gt;).animate({ scrollTop&lt;span style="color: #333399;"&gt;:&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'0px'&lt;/span&gt; }, &lt;span style="color: #6e00aa;"&gt;800&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//防止滚动条向上滚动，导致多重效果&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.event.preventDefault();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}, false);&lt;br /&gt;}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/20120308134552115.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;这里有一个地方需要说明一下。为了方便js的开发，我这里使用了jquery，所以需要在头部声明中声明以下一段话。这样我们就可以在其中使用jquery了。&lt;/div&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;// @require &lt;a href="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;3. 保存该用户脚本然后随便打开一个网页，效果如下：&lt;/div&gt;&lt;p&gt;&lt;code&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203081345509823.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;调试用户脚本&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果需要调试我们写的脚本，可以在Tempermonkey的设置界面开启Debug Scripts功能。然后在打开页面的时候按F12开启 developer tools，就会自动进入调试模式了。如下图所示：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203081345532524.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201203/201203081345541902.png" alt="" /&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2385132.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/03/08/2385132.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/02/13/2350086.html</id><title type="text">python使用matplotlib绘图 -- barChart</title><summary type="text">本篇介绍了如何使用matplotlib进行柱状图的绘制</summary><published>2012-02-13T14:18:00Z</published><updated>2012-02-13T14:18:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/13/2350086.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/13/2350086.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a class="reference external" style="color: #355f7c; text-decoration: none;" href="http://matplotlib.sourceforge.net/"&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matplotlib&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;是python最著名的绘图库，它提供了一整套和matlab相似的命令API，十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件，嵌入GUI应用程序中。它的文档相当完备，并且&lt;span class="Apple-converted-space"&gt;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a class="reference external" style="color: #355f7c; text-decoration: none;" href="http://matplotlib.sourceforge.net/gallery.html"&gt;&lt;span style="color: #0000ff;"&gt;Gallery页面&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;中有上百幅缩略图，打开之后都有源程序。因此如果你需要绘制某种类型的图，只需要在这个页面中浏览/复制/粘贴一下，基本上都能搞定。&amp;nbsp; -----引用自：&lt;a href="http://hyry.dip.jp/pydoc/matplotlib_intro.html"&gt;http://hyry.dip.jp/pydoc/matplotlib_intro.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;你可以从&amp;nbsp;&lt;a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib"&gt;http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib&lt;/a&gt;&amp;nbsp;下载安装matplotlib。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;这篇我们用matplotlib从构造最简单的bar一步一步向复杂的bar前行。什么是最简单的bar，看如下语句你就知道她有多么简单了：&lt;/p&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; matplotlib.pyplot as plt&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;)&lt;br /&gt;plt.show()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;执行效果：&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217564282.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;是的，三句话就可以了，是我见过最简单的绘图语句。首先我们import了matplotlib.pyplot ，然后直接调用其bar方法，最后用show显示图像。我解释一下bar中的两个参数：&lt;/div&gt;&lt;ul&gt;&lt;li&gt;left：柱形的左边缘的位置，如果我们指定1那么当前柱形的左边缘的x值就是1.0了&lt;/li&gt;&lt;li&gt;height：这是柱形的高度，也就是Y轴的值了&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;left，height除了可以使用单独的值（此时是一个柱形），也可以使用元组来替换（此时代表多个矩形）。例如，下面的例子：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; matplotlib.pyplot as plt&amp;nbsp;&lt;br /&gt;&lt;br /&gt;plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;5&lt;/span&gt;))&lt;br /&gt;plt.show()&lt;/div&gt;&lt;p&gt;&lt;code&gt;&lt;/code&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;code&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217574871.png" alt="" /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;可以看到 left = (0,1)的意思就是总共有两个矩形，第一个的左边缘为0，第二个的左边缘为1。height参数同理。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;当然，可能你还觉得这两个矩形&amp;ldquo;太胖&amp;rdquo;了。此时我们可以通过指定bar的width参数来设置它们的宽度。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; matplotlib.pyplot as plt&amp;nbsp;&lt;br /&gt;&lt;br /&gt;plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;5&lt;/span&gt;),width &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;35&lt;/span&gt;)&lt;br /&gt;plt.show()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217577969.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;此时又来需求了，我需要标明x，y轴的说明。比如x轴是性别，y轴是人数。实现也很简单，看代码：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; matplotlib.pyplot as plt&amp;nbsp;&lt;br /&gt;&lt;br /&gt;plt.xlabel(u&lt;span style="color: #ff00bf;"&gt;'性别'&lt;/span&gt;)&lt;br /&gt;plt.ylabel(u&lt;span style="color: #ff00bf;"&gt;'人数'&lt;/span&gt;)&lt;br /&gt;plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;5&lt;/span&gt;),width &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;35&lt;/span&gt;)&lt;br /&gt;plt.show()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217579082.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;注意这里的中文一定要用u（3.0以上好像不用，我用的2.7），因为matplotlib只支持unicode。接下来，让我们在x轴上的每个bar进行说明。比如第一个是&amp;ldquo;男&amp;rdquo;，第二个是&amp;ldquo;女&amp;rdquo;。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; matplotlib.pyplot as plt&amp;nbsp;&lt;br /&gt;&lt;br /&gt;plt.xlabel(u&lt;span style="color: #ff00bf;"&gt;'性别'&lt;/span&gt;)&lt;br /&gt;plt.ylabel(u&lt;span style="color: #ff00bf;"&gt;'人数'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;plt.xticks((&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),(u&lt;span style="color: #ff00bf;"&gt;'男'&lt;/span&gt;,u&lt;span style="color: #ff00bf;"&gt;'女'&lt;/span&gt;))&lt;br /&gt;&lt;br /&gt;plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;5&lt;/span&gt;),width &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;35&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;plt.show()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217584970.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;plt.xticks的用法和我们前面说到的left,height的用法差不多。如果你有几个bar，那么就是几维的元组。第一个是文字的位置，第二个是具体的文字说明。不过这里有个问题，很显然我们指定的位置有些&amp;ldquo;偏移&amp;rdquo;，最理想的状态应该在每个矩形的中间。你可以更改(0,1)=&amp;gt;( (0+0.35)/2 ,(1+0.35)/2 )不过这样比较麻烦。我们可以通过直接指定bar方法里面的align="center"就可以让文字居中了。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; matplotlib.pyplot as plt&amp;nbsp;&lt;br /&gt;&lt;br /&gt;plt.xlabel(u&lt;span style="color: #ff00bf;"&gt;'性别'&lt;/span&gt;)&lt;br /&gt;plt.ylabel(u&lt;span style="color: #ff00bf;"&gt;'人数'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;plt.xticks((&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),(u&lt;span style="color: #ff00bf;"&gt;'男'&lt;/span&gt;,u&lt;span style="color: #ff00bf;"&gt;'女'&lt;/span&gt;))&lt;br /&gt;&lt;br /&gt;plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;5&lt;/span&gt;),width &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;35&lt;/span&gt;,align&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"center"&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;plt.show()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217584131.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;接下来，我们还可以给图标加入标题。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;plt.title(u&lt;span style="color: #ff00bf;"&gt;"性别比例分析"&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217583608.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;当然，还有图例也少不掉:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; matplotlib.pyplot as plt&amp;nbsp;&lt;br /&gt;&lt;br /&gt;plt.xlabel(u&lt;span style="color: #ff00bf;"&gt;'性别'&lt;/span&gt;)&lt;br /&gt;plt.ylabel(u&lt;span style="color: #ff00bf;"&gt;'人数'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;plt.title(u&lt;span style="color: #ff00bf;"&gt;"性别比例分析"&lt;/span&gt;)&lt;br /&gt;plt.xticks((&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),(u&lt;span style="color: #ff00bf;"&gt;'男'&lt;/span&gt;,u&lt;span style="color: #ff00bf;"&gt;'女'&lt;/span&gt;))&lt;br /&gt;rect &lt;span style="color: #333399;"&gt;=&lt;/span&gt; plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;5&lt;/span&gt;),width &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;35&lt;/span&gt;,align&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"center"&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;plt.legend((rect,),(u&lt;span style="color: #ff00bf;"&gt;"图例"&lt;/span&gt;,))&lt;br /&gt;&lt;br /&gt;plt.show()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217581133.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;注意这里的legend方法，里面的参数必须是元组。即使你只有一个图例，不然显示不正确。&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;接下来，我们还可以在每个矩形的上面标注它具体点Y值。这里，我们需要用到一个通用的方法：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; autolabel(rects)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; rect &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; rects&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; rect.get_height()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plt.text(rect.get_x()&lt;span style="color: #333399;"&gt;+&lt;/span&gt;rect.get_width()&lt;span style="color: #333399;"&gt;/&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;2&lt;/span&gt;., &lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;03&lt;/span&gt;&lt;span style="color: #333399;"&gt;*&lt;/span&gt;height, &lt;span style="color: #ff00bf;"&gt;'%s'&lt;/span&gt; &lt;span style="color: #333399;"&gt;%&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;float&lt;/strong&gt;&lt;/span&gt;(height))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;其中plt.text的参数分别是：x坐标，y坐标，要显示的文字。所以，调用代码如下：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; matplotlib.pyplot as plt&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; autolabel(rects)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; rect &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; rects&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; rect.get_height()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plt.text(rect.get_x()&lt;span style="color: #333399;"&gt;+&lt;/span&gt;rect.get_width()&lt;span style="color: #333399;"&gt;/&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;2&lt;/span&gt;., &lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;03&lt;/span&gt;&lt;span style="color: #333399;"&gt;*&lt;/span&gt;height, &lt;span style="color: #ff00bf;"&gt;'%s'&lt;/span&gt; &lt;span style="color: #333399;"&gt;%&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;float&lt;/strong&gt;&lt;/span&gt;(height))&lt;br /&gt;&lt;br /&gt;plt.xlabel(u&lt;span style="color: #ff00bf;"&gt;'性别'&lt;/span&gt;)&lt;br /&gt;plt.ylabel(u&lt;span style="color: #ff00bf;"&gt;'人数'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;plt.title(u&lt;span style="color: #ff00bf;"&gt;"性别比例分析"&lt;/span&gt;)&lt;br /&gt;plt.xticks((&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),(u&lt;span style="color: #ff00bf;"&gt;'男'&lt;/span&gt;,u&lt;span style="color: #ff00bf;"&gt;'女'&lt;/span&gt;))&lt;br /&gt;rect &lt;span style="color: #333399;"&gt;=&lt;/span&gt; plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;5&lt;/span&gt;),width &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;35&lt;/span&gt;,align&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"center"&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;plt.legend((rect,),(u&lt;span style="color: #ff00bf;"&gt;"图例"&lt;/span&gt;,))&lt;br /&gt;autolabel(rect)&lt;br /&gt;&lt;br /&gt;plt.show()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217597578.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;到这里这个图形已经基本完备了，不过可以看到你一个矩形紧靠这顶部，不是很好看。最好能够空出一段距离出来就好了。这个设置我没有找到具体的属性。不过，我还是通过一个小技巧来实现了。就是bar属性的yerr参数。一旦设置了这个参数，那么对应的矩形上面就会有一个竖着的线，我不知道他是干什么的。不过当我把这个值设置的很小的时候，上面的空白就自动空出来了。如图：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;br /&gt;rect &lt;span style="color: #333399;"&gt;=&lt;/span&gt; plt.bar(left &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;),height &lt;span style="color: #333399;"&gt;=&lt;/span&gt; (&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;5&lt;/span&gt;),width &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;35&lt;/span&gt;,align&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"center"&lt;/span&gt;,yerr&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;000001&lt;/span&gt;)&lt;/div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202132217594230.png" alt="" /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;对于左右两边能否空出空白来暂时还没有找到（xerr参数不行）&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2350086.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/02/13/2350086.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/02/12/2348366.html</id><title type="text">使用python进行新浪微博应用开发</title><summary type="text">本篇介绍了如何通过新浪微博的API简单构建一个python应用。</summary><published>2012-02-12T13:43:00Z</published><updated>2012-02-12T13:43:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/12/2348366.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/12/2348366.html"/><content type="html">&lt;div&gt;如何在新浪开放平台上创建一个应用？&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;在&lt;a href="http://open.weibo.com/apps"&gt;&lt;span style="color: #0000ff;"&gt;开放平台-我的应用&lt;/span&gt;&lt;/a&gt;下面创建新的应用。按照提示一步一步创建，傻瓜式的。 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202122142578120.png" alt="" /&gt;&lt;/li&gt;&lt;li&gt;点击刚才创建的应用进入详细页面，然后查看应用信息-基本信息下面。在程序开发过程中，我们需要app key 和 app secret来调用新浪API。&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202122142585993.jpg" alt="" /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.&amp;nbsp;&amp;nbsp;&amp;nbsp;下载对应语言的sdk，当然这里以python为例。下载地址：&lt;a href="http://code.google.com/p/sinaweibopy/"&gt;http://code.google.com/p/sinaweibopy/&lt;/a&gt;。下载完成后将里面的weibo.py复制到你的应用程序同一目录下，或者复制到lib/site-package下。这样你的应用就可以调用sdk了。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4.&amp;nbsp;&amp;nbsp;&amp;nbsp; 在你的程序里面做如下测试，如果你幸运的话你应该能得到正确的返回结果了。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;from&lt;/strong&gt;&lt;/span&gt; weibo &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; APIClient&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APP_KEY &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'xxxx'&lt;/span&gt; &lt;span style="color: #008000;"&gt;# app key&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APP_SECRET &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'xxxx'&lt;/span&gt; &lt;span style="color: #008000;"&gt;# app secret&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CALLBACK_URL &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'xxxxxx'&lt;/span&gt;&lt;span style="color: #008000;"&gt;# callback url&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#利用官方微博SDK&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client &lt;span style="color: #333399;"&gt;=&lt;/span&gt; APIClient(app_key&lt;span style="color: #333399;"&gt;=&lt;/span&gt;APP_KEY, app_secret&lt;span style="color: #333399;"&gt;=&lt;/span&gt;APP_SECRET, redirect_uri&lt;span style="color: #333399;"&gt;=&lt;/span&gt;CALLBACK_URL)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#用得到的url到新浪页面访问&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url &lt;span style="color: #333399;"&gt;=&lt;/span&gt; client.get_authorize_url()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;webbrowser&lt;/strong&gt;&lt;/span&gt;.open_new(url)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#手动输入新浪返回的code&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;code &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;raw_input&lt;/strong&gt;&lt;/span&gt;()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#新浪返回的token，类似abc123xyz456，每天的token不一样&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r &lt;span style="color: #333399;"&gt;=&lt;/span&gt; client.request_access_token(code)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_token &lt;span style="color: #333399;"&gt;=&lt;/span&gt; r.access_token&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expires_in &lt;span style="color: #333399;"&gt;=&lt;/span&gt; r.expires_in &lt;span style="color: #008000;"&gt;# token过期的UNIX时间&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#设置得到的access_token&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client.set_access_token(access_token, expires_in)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#有了access_token后，可以做任何事情了&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client.get.friendships__followers()&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 利用API做你能想到的任何事情，比如我做了一个粉丝和关注者的性别分析：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202122142586026.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;要实现这个统计很简单，首先获得某个用户的所有关注者：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; GetAllFriends(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;,uid)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到所有的关注对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回：(screenName,gender)元组数组&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resFollows &lt;span style="color: #333399;"&gt;=&lt;/span&gt; []&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nextCursor &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #333399;"&gt;-&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;while&lt;/strong&gt;&lt;/span&gt; nextCursor &lt;span style="color: #333399;"&gt;!=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;followers &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.client.get.friendships__friends(uid&lt;span style="color: #333399;"&gt;=&lt;/span&gt;uid,count&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;200&lt;/span&gt;,cursor&lt;span style="color: #333399;"&gt;=&lt;/span&gt;nextCursor)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nextCursor &lt;span style="color: #333399;"&gt;=&lt;/span&gt; followers[&lt;span style="color: #ff00bf;"&gt;"next_cursor"&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; follower &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; followers[&lt;span style="color: #ff00bf;"&gt;"users"&lt;/span&gt;]&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resFollows.append( (follower[&lt;span style="color: #ff00bf;"&gt;"screen_name"&lt;/span&gt;],follower[&lt;span style="color: #ff00bf;"&gt;"gender"&lt;/span&gt;]) )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;len&lt;/strong&gt;&lt;/span&gt;(resFollows)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; resFollows&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;code&gt;然后利用&lt;a href="http://matplotlib.sourceforge.net/index.html"&gt;&lt;span style="color: #0000ff;"&gt;matplotlib&lt;/span&gt;&lt;/a&gt;这个第三方库进行绘图即可。关于matplotlib我想我后面会写一些文章进行说明的，很强大的一个二维绘图库。&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; FriendsMaleOrFemale(uid)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wb &lt;span style="color: #333399;"&gt;=&lt;/span&gt; MySinaWeiBo()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; i &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; wb.GetAllFriends(uid)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; i[&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;] &lt;span style="color: #333399;"&gt;==&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"m"&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m &lt;span style="color: #333399;"&gt;=&lt;/span&gt; m&lt;span style="color: #333399;"&gt;+&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;elif&lt;/strong&gt;&lt;/span&gt; i[&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;] &lt;span style="color: #333399;"&gt;==&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"f"&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f &lt;span style="color: #333399;"&gt;=&lt;/span&gt; f&lt;span style="color: #333399;"&gt;+&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n &lt;span style="color: #333399;"&gt;=&lt;/span&gt; n&lt;span style="color: #333399;"&gt;+&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ind &lt;span style="color: #333399;"&gt;=&lt;/span&gt; np.arange(&lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;,&lt;span style="color: #6e00aa;"&gt;4&lt;/span&gt;) &lt;span style="color: #008000;"&gt;# np.arange(1,N+1)&amp;nbsp;&amp;nbsp;# the x locations for the groups&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;.&lt;span style="color: #6e00aa;"&gt;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;# the width of the bars&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plt.subplot(&lt;span style="color: #6e00aa;"&gt;111&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rects1 &lt;span style="color: #333399;"&gt;=&lt;/span&gt; plt.bar(ind, (m,f,n), width,bottom &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;,align &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'center'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#增加Y轴说明&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plt.ylabel(u&lt;span style="color: #ff00bf;"&gt;'关注数'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#增加标题&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plt.title(u&lt;span style="color: #ff00bf;"&gt;'我关注的人性别分析(有效样本：%d)'&lt;/span&gt; &lt;span style="color: #333399;"&gt;%&lt;/span&gt; (m&lt;span style="color: #333399;"&gt;+&lt;/span&gt;f&lt;span style="color: #333399;"&gt;+&lt;/span&gt;n))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#设置x坐标位置和文字&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plt.xticks(ind, (u&lt;span style="color: #ff00bf;"&gt;"男"&lt;/span&gt;,u&lt;span style="color: #ff00bf;"&gt;"女"&lt;/span&gt;,u&lt;span style="color: #ff00bf;"&gt;"未知"&lt;/span&gt;) )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autolabel(rects1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plt.legend(rects1,(u&lt;span style="color: #ff00bf;"&gt;"用户：%s"&lt;/span&gt; &lt;span style="color: #333399;"&gt;%&lt;/span&gt; wb.GetUserByUid(uid),))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plt.show()&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2348366.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/02/12/2348366.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2343286.html</id><title type="text">利用python简化sql server数据导入导出</title><summary type="text">使用python简化，自动化bcp操作，使得导入导出sql server数据自动化</summary><published>2012-02-08T14:17:00Z</published><updated>2012-02-08T14:17:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2343286.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2343286.html"/><content type="html">&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 前面我们介绍了如何&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2342307.html"&gt;&lt;span style="color: #0000ff;"&gt;使用sqlserver的BCP命令&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;进行数据的导出和导入。使用这个命令一个不足的地方的是不能对整个数据库进行一次性操作。如果表很多的时候就要一个个命令操作，不可谓不麻烦！&lt;/div&gt;&lt;div&gt;正好最近在学习python，于是打算用python实现了一个简化bcp操作的程序。点击程序后就会自动将指定的数据库所有的表的备份数据放到一个特定的目录下。当然，程序也提供对应的自动化导入功能～～&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;源码：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #008000;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# -*- coding: UTF-8 -*-&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;导出数据库数据.py&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# Purpose:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# Author:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQ1000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# Created:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;08-02-2012&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; pymssql&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;sys&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/span&gt; MSSQLHelper&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;对pymssql的简单封装&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pymssql库，该库到这里下载：http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;使用该库时，需要在Sql Server Configuration Manager里面将TCP/IP协议开启&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用法：&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;__init__&lt;/strong&gt;&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;,host,user,pwd,db)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.host &lt;span style="color: #333399;"&gt;=&lt;/span&gt; host&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.user &lt;span style="color: #333399;"&gt;=&lt;/span&gt; user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.pwd &lt;span style="color: #333399;"&gt;=&lt;/span&gt; pwd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.db &lt;span style="color: #333399;"&gt;=&lt;/span&gt; db&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; __GetConnect(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到连接信息&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回: conn.cursor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.db&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;raise&lt;/strong&gt;&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;NameError&lt;/strong&gt;&lt;/span&gt;,&lt;span style="color: #ff00bf;"&gt;"没有设置数据库信息"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn &lt;span style="color: #333399;"&gt;=&lt;/span&gt; pymssql.connect(host&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.host,user&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.user,password&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.pwd,database&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.db,charset&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"utf8"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn.cursor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/span&gt; cur&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;raise&lt;/strong&gt;&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;NameError&lt;/strong&gt;&lt;/span&gt;,&lt;span style="color: #ff00bf;"&gt;"连接数据库失败"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; cur&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; ExecQuery(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;,sql)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;执行查询语句&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回的是一个包含tuple的list，list的元素是记录行，tuple的元素是每行记录的字段&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;调用示例：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ms = MSSQLHelper(host="&lt;/span&gt;localhost&lt;span style="color: #ff00bf;"&gt;",user="&lt;/span&gt;sa&lt;span style="color: #ff00bf;"&gt;",pwd="&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;123456&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;",db="&lt;/span&gt;PythonWeiboStatistics&lt;span style="color: #ff00bf;"&gt;")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resList = ms.ExecQuery("&lt;/span&gt;SELECT &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;id&lt;/strong&gt;&lt;/span&gt;,NickName FROM WeiBoUser&lt;span style="color: #ff00bf;"&gt;")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (id,NickName) in resList:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print str(id),NickName&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.__GetConnect()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur.execute(sql.encode(&lt;span style="color: #ff00bf;"&gt;"utf8"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resList &lt;span style="color: #333399;"&gt;=&lt;/span&gt;&amp;nbsp;&amp;nbsp;cur.fetchall()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#查询完毕后必须关闭连接&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; resList&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; ExecNonQuery(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;,sql)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;执行非查询语句&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;调用示例：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur = self.__GetConnect()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur.execute(sql)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.conn.commit()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.conn.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.__GetConnect()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur.execute(sql.encode(&lt;span style="color: #ff00bf;"&gt;"utf8"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn.commit()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn.close()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; RemoveDirectory (top)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;while&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;1&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.path.exists(top)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;len&lt;/strong&gt;&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.listdir(top)) &lt;span style="color: #333399;"&gt;==&lt;/span&gt; &lt;span style="color: #6e00aa;"&gt;0&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.rmdir (top)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;break&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; root, dirs, files &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.walk(top, topdown&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;False&lt;/strong&gt;&lt;/span&gt;)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; name &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; files&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.remove(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.path.join(root, name))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; name &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; dirs&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.rmdir(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.path.join(root, name))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;break&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; export(db,user,password)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"导出数据库"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#得到当前脚本的执行目录&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentDirectory &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.getcwd()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#查看是否已经存在备份目录，如果有则删除，没有则新建目录&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;backUpDirectory &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"%s\\%s"&lt;/span&gt; &lt;span style="color: #333399;"&gt;%&lt;/span&gt;( currentDirectory,db&lt;span style="color: #333399;"&gt;+&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"Backup"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.path.exists(backUpDirectory)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RemoveDirectory(backUpDirectory)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.mkdir(backUpDirectory)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.mkdir(backUpDirectory)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#得到要到处的数据库的所有表&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ms &lt;span style="color: #333399;"&gt;=&lt;/span&gt; MSSQLHelper(host&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"localhost"&lt;/span&gt;,user&lt;span style="color: #333399;"&gt;=&lt;/span&gt;user,pwd&lt;span style="color: #333399;"&gt;=&lt;/span&gt;password,db&lt;span style="color: #333399;"&gt;=&lt;/span&gt;db)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; (name,) &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; ms.ExecQuery(&lt;span style="color: #ff00bf;"&gt;"select name from sysobjects where xtype='U'"&lt;/span&gt;)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentTablePath &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"%s\\%s.txt"&lt;/span&gt;&lt;span style="color: #333399;"&gt;%&lt;/span&gt;(backUpDirectory,name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.popen(&lt;span style="color: #ff00bf;"&gt;'BCP %s..%s out %s -c -U"%s" -P"%s"'&lt;/span&gt; &lt;span style="color: #333399;"&gt;%&lt;/span&gt; (db,name,currentTablePath,user,password))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; r.read()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.close()&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; inport(db,user,password)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"导入数据库"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#得到当前脚本的执行目录&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentDirectory &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.getcwd()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#查看是否已经存在备份目录，如果有则删除，没有则新建目录&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;backUpDirectory &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"%s\\%s"&lt;/span&gt; &lt;span style="color: #333399;"&gt;%&lt;/span&gt;( currentDirectory,db&lt;span style="color: #333399;"&gt;+&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"Backup"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.path.exists(backUpDirectory)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#得到要到处的数据库的所有表&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ms &lt;span style="color: #333399;"&gt;=&lt;/span&gt; MSSQLHelper(host&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"localhost"&lt;/span&gt;,user&lt;span style="color: #333399;"&gt;=&lt;/span&gt;user,pwd&lt;span style="color: #333399;"&gt;=&lt;/span&gt;password,db&lt;span style="color: #333399;"&gt;=&lt;/span&gt;db)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; (name,) &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; ms.ExecQuery(&lt;span style="color: #ff00bf;"&gt;"select name from sysobjects where xtype='U'"&lt;/span&gt;)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentTablePath &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"%s\\%s.txt"&lt;/span&gt;&lt;span style="color: #333399;"&gt;%&lt;/span&gt;(backUpDirectory,name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;os&lt;/strong&gt;&lt;/span&gt;.popen(&lt;span style="color: #ff00bf;"&gt;'BCP %s..%s in %s -c -U"%s" -P"%s"'&lt;/span&gt; &lt;span style="color: #333399;"&gt;%&lt;/span&gt; (db,name,currentTablePath,user,password))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; r.read()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.close()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; main()&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"PythonWeiboStatistics"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;user &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"sa"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;password &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"123456"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#这边可以根据不同的参数选择不同的操作&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#我是使用了两个文件，一个是导入一个导出&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;export(db,user,password)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;__name__&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #333399;"&gt;==&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'__main__'&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;main()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; u&lt;span style="color: #ff00bf;"&gt;"\n导出完成...\n回车键退出"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;raw_input&lt;/strong&gt;&lt;/span&gt;()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;因为要获得一个数据库中所有的表，所以我使用了&lt;span style="color: #0000ff;"&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/02/06/2340367.html"&gt;&lt;span style="color: #0000ff;"&gt;pymssql来进行数据库操作&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;并进行理论简单的封装，形成了MSSQLHelper类。具体的pymssql的下载和用法大家可以到网上进行搜索。思路很简单：&lt;/div&gt;&lt;ul&gt;&lt;li&gt;导入的时候查看是否已经存在特定的导出目录，如果存在则删除该目录下所有的文件&lt;/li&gt;&lt;li&gt;利用pymssql读取指定数据库中所有的表名字，对每个表进行bcp命令&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;导入的功能则是省去了删除已存在文件那个操作，其他都差不多。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2343286.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2343286.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2342307.html</id><title type="text">SQL Server数据的导入导出</title><summary type="text">本文简单记录了如何使用BCP命令进行sql server数据的导入导出操作。</summary><published>2012-02-08T02:28:00Z</published><updated>2012-02-08T02:28:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2342307.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2342307.html"/><content type="html">&lt;div&gt;这两天在用新学习的python抓新浪微博首页的数据，这些数据都被存在的sql server当中。因为白天在公司和晚上在宿舍用的数据库版本不一样，所以如果在宿舍直接附加公司的数据库的话会报错。没办法，只好通过SQL server中提供的BCP导入导出的办法来同步两个地方的数据。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;这里简单记录一下如何使用BCP工具进行数据的导入导出。首先BCP是sql server自带的工具，所以只要你安装了sql server后就自带了。在cmd中输入cmd，你会发现他的一些参数说明选项。具体的参数选项大家可以在具体用到的时候再去查看，这里就不一一解释了（实际上我也用的不多 ^_^）&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202081027333155.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;一个最简单的导出示例：&lt;/div&gt;&lt;div&gt;如果你有个数据库A，里面有一个表B，那么导出B数据的命令如下：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;BCP A..B &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;out&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;/span&gt;:\currency1.txt &lt;span style="color: #333399;"&gt;-&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #333399;"&gt;-&lt;/span&gt;u&lt;span style="color: #ff00bf;"&gt;"sa"&lt;/span&gt; &lt;span style="color: #333399;"&gt;-&lt;/span&gt;p&lt;span style="color: #ff00bf;"&gt;"123456"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;注意A和B中间有两个..，如果是使用继承验证的话可以去掉-u -p选项改为-t就行了。下图是我执行的截图：&lt;/div&gt;&lt;div&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201202/201202081027332349.png" alt="" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;此时如果要导入已经导出的数据，执行如下命令：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;BCP A..B &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;/span&gt;:\currency1.txt &lt;span style="color: #333399;"&gt;-&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #333399;"&gt;-&lt;/span&gt;U&lt;span style="color: #ff00bf;"&gt;"sa"&lt;/span&gt; &lt;span style="color: #333399;"&gt;-&lt;/span&gt;P&lt;span style="color: #ff00bf;"&gt;"123456"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;可以看到与导出唯一不同的地方就是out换成了in。至此，最简明sql server数据导入导出记录完毕！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2342307.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/02/08/2342307.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/02/06/2340367.html</id><title type="text">python 使用pymssql连接sql server数据库</title><summary type="text">本文介绍了如何使用pymssql进行sql server的相关数据操作。还有在使用pymssql的时候可能出现乱码问题的解决方案。</summary><published>2012-02-06T08:45:00Z</published><updated>2012-02-06T08:45:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/06/2340367.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/02/06/2340367.html"/><content type="html">&lt;div&gt;&lt;div style="text-align: left; background-color: window; font-family: Courier New; color: black; margin-left: auto; font-size: 12px; margin-right: auto; border: black 1px solid; padding: 3px;"&gt;&lt;span style="color: #008000;"&gt;#coding=utf-8&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# Name: pymssqlTest.py&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# Purpose: 测试 pymssql库，该库到这里下载：http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# Author: scott&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;# Created: 04/02/2012&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;#-------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;import&lt;/strong&gt;&lt;/span&gt; pymssql&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/span&gt; MSSQL&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;对pymssql的简单封装&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pymssql库，该库到这里下载：http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;使用该库时，需要在Sql Server Configuration Manager里面将TCP/IP协议开启&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用法：&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;__init__&lt;/strong&gt;&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;,host,user,pwd,db)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.host &lt;span style="color: #333399;"&gt;=&lt;/span&gt; host&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.user &lt;span style="color: #333399;"&gt;=&lt;/span&gt; user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.pwd &lt;span style="color: #333399;"&gt;=&lt;/span&gt; pwd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.db &lt;span style="color: #333399;"&gt;=&lt;/span&gt; db&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; __GetConnect(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;得到连接信息&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回: conn.cursor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.db&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;raise&lt;/strong&gt;&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;NameError&lt;/strong&gt;&lt;/span&gt;,&lt;span style="color: #ff00bf;"&gt;"没有设置数据库信息"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn &lt;span style="color: #333399;"&gt;=&lt;/span&gt; pymssql.connect(host&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.host,user&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.user,password&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.pwd,database&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.db,charset&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"utf8"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn.cursor()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/span&gt; cur&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;raise&lt;/strong&gt;&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;NameError&lt;/strong&gt;&lt;/span&gt;,&lt;span style="color: #ff00bf;"&gt;"连接数据库失败"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; cur&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; ExecQuery(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;,sql)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;执行查询语句&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回的是一个包含tuple的list，list的元素是记录行，tuple的元素是每行记录的字段&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;调用示例：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ms = MSSQL(host="&lt;/span&gt;localhost&lt;span style="color: #ff00bf;"&gt;",user="&lt;/span&gt;sa&lt;span style="color: #ff00bf;"&gt;",pwd="&lt;/span&gt;&lt;span style="color: #6e00aa;"&gt;123456&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;",db="&lt;/span&gt;PythonWeiboStatistics&lt;span style="color: #ff00bf;"&gt;")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resList = ms.ExecQuery("&lt;/span&gt;SELECT &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;id&lt;/strong&gt;&lt;/span&gt;,NickName FROM WeiBoUser&lt;span style="color: #ff00bf;"&gt;")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (id,NickName) in resList:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print str(id),NickName&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.__GetConnect()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur.execute(sql)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resList &lt;span style="color: #333399;"&gt;=&lt;/span&gt; cur.fetchall()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#查询完毕后必须关闭连接&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; resList&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; ExecNonQuery(&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;,sql)&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;执行非查询语句&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;调用示例：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur = self.__GetConnect()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur.execute(sql)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.conn.commit()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.conn.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.__GetConnect()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cur.execute(sql)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn.commit()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.conn.close()&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;def&lt;/strong&gt;&lt;/span&gt; main()&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;## ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;## #返回的是一个包含tuple的list，list的元素是记录行，tuple的元素是每行记录的字段&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;## ms.ExecNonQuery("insert into WeiBoUser values('2','3')")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ms &lt;span style="color: #333399;"&gt;=&lt;/span&gt; MSSQL(host&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"localhost"&lt;/span&gt;,user&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"sa"&lt;/span&gt;,pwd&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"123456"&lt;/span&gt;,db&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"PythonWeiboStatistics"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resList &lt;span style="color: #333399;"&gt;=&lt;/span&gt; ms.ExecQuery(&lt;span style="color: #ff00bf;"&gt;"SELECT id,weibocontent FROM WeiBo"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;id&lt;/strong&gt;&lt;/span&gt;,weibocontent) &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;in&lt;/strong&gt;&lt;/span&gt; resList&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;str&lt;/strong&gt;&lt;/span&gt;(weibocontent).decode(&lt;span style="color: #ff00bf;"&gt;"utf8"&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;__name__&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: #333399;"&gt;==&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;'__main__'&lt;/span&gt;&lt;span style="color: #333399;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;main()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;注意事项：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff0000;"&gt;使用pymssql进行中文操作时候可能会出现中文乱码&lt;/span&gt;，我解决的方案是：&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: 宋体;"&gt;文件头加上 #coding=utf8 &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 宋体;"&gt;sql语句中有中文的时候进行encode&lt;/span&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;insertSql &lt;span style="color: #333399;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00bf;"&gt;"insert into WeiBo([UserId],[WeiBoContent],[PublishDate]) values(1,'测试','2012/2/1')"&lt;/span&gt;.encode(&lt;span style="color: #ff00bf;"&gt;"utf8"&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;nbsp;&lt;span style="font-family: 宋体;"&gt;连接的时候加入charset设置信息&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pymssql.connect(host&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.host,user&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.user,password&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.pwd,database&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;self&lt;/strong&gt;&lt;/span&gt;.db,charset&lt;span style="color: #333399;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00bf;"&gt;"utf8"&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2340367.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/02/06/2340367.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/qianlifeng/archive/2012/01/09/2317625.html</id><title type="text">EasyVS -- 快速整理region的Visual Studio扩展</title><summary type="text">前前后后研究VSX也一个多月了，这两天终于做了一个小的插件EasyVS，该插件目前只支持VS2010，vs2008的支持可能要过一段时间。还好我没有使用MEF的内容，所以移植到vs2008上应该困难不大。写这个插件的主要目的希望像Resharper那样提供许多实用的功能，让在vs中进行编码成为一种享受。</summary><published>2012-01-09T15:30:00Z</published><updated>2012-01-09T15:30:00Z</updated><author><name>qianlifeng</name><uri>http://www.cnblogs.com/qianlifeng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/qianlifeng/archive/2012/01/09/2317625.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/qianlifeng/archive/2012/01/09/2317625.html"/><content type="html">&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;简介&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;前前后后研究VSX也一个多月了，这两天终于做了一个小的插件EasyVS，该插件目前只支持VS2010，vs2008的支持可能要过一段时间。还好我没有使用MEF的内容，所以移植到vs2008上应该困难不大。写这个插件的主要目的希望像Resharper那样提供许多实用的功能，让在vs中进行编码成为一种享受。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;特色&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;span style="color: #3366ff; font-size: 14pt; font-family: tahoma, arial, helvetica, sans-serif;"&gt;&lt;strong&gt;Quick Region&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;所谓快速region功能，就是在代码视图里面通过快捷键Ctrl+Q,Ctrl+R快捷键将代码自动分类到不同的region下，目前的region包括&amp;ldquo;变量&amp;rdquo;，&amp;ldquo;构造函数&amp;rdquo;，&amp;ldquo;事件&amp;rdquo;，&amp;ldquo;方法&amp;rdquo;，&amp;ldquo;属性&amp;rdquo;等。下面是一个例子演示：&lt;/div&gt;&lt;div&gt;&lt;span style="color: #ff6820;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #ff6820;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 下面这个类是我从随便翻出来的，可以看到他的代码格式很乱&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201201/201201092330054897.png" alt="" align="baseline" border="0" hspace="0" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6820;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6820;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 下面通过EasyVS提供的快速Region功能进行代码的自动分类&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201201/201201092330074765.png" alt="" align="baseline" border="0" hspace="0" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6820;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6820;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;整理后的代码&lt;/span&gt;&lt;/p&gt;&lt;div align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src="http://images.cnblogs.com/cnblogs_com/qianlifeng/201201/20120109233007305.png" alt="" align="baseline" border="0" hspace="0" /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;说白了就是让一些region的功能让程序帮你做了，省时省力。不过有一个缺点也很明显就是使用这个工具格式化出的region都一样，就缺少了自己特定的region了（原来自己的reigon会消失，以后的版本打算增加保留自己自定义region的功能）&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;span style="color: #3366ff; font-size: 14pt; font-family: tahoma, arial, helvetica, sans-serif;"&gt;&lt;strong&gt;&lt;span data-mce-=""&gt;Less Tab&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;span&gt;通过设置指定的tab数量，插件能够自动为您关闭多余的Tab，减少VS内存占用，还您一个清爽的VSTab栏。例如，我在设置里面设置了只打开5个Tab&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/100514/2012011214090815.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;那么以后在VS中你能同时打开的tab数不会超过5个。这样能够减少不知不觉中打开的Tab数，关闭不必要的tab以释放占用的内存。至于哪些tab会被关闭。你使用的越频繁的tab越不会被关闭。而很长时间没有使用的tab则关闭的几率会比较高。一句话，这个东西不会影响你正常的代码操作。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img src="http://pic002.cnblogs.com/images/2012/100514/2012011214082048.jpg" alt="" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;更新日志&lt;/div&gt;&lt;p&gt;&lt;span style="font-weight: 800;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;V0.2&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.增加Quick Region自定义region名字功能&lt;/p&gt;&lt;p&gt;2.修改Quick Region的分组规则，对于已经存在的region不处理。如果设置的region在当前代码中已经存在，则将外部的此类型加入已经存在的region中&lt;/p&gt;&lt;p&gt;3.增加Less Tab功能&lt;/p&gt;&lt;p&gt;4.增加自动更新功能&lt;/p&gt;&lt;p&gt;5.修复Quick Region的一个BUG（如果存在region嵌套，则出错的问题）&lt;/p&gt;&lt;p&gt;6.增加网络代理设置&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;V0.1&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.增加Quick Region功能&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="height: 30px; line-height: 30px; background-color: #dee7de; font-weight: bold; font-size: 18px; padding: 5px; color: #d2003a;"&gt;下载&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 该插件我目前已经发布到了微软的官方VS插件库，该插件的地址为：&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/7310649d-87d9-45d2-b7da-99e5b001549e"&gt;&lt;span style="color: #0000ff; font-size: large;"&gt;&lt;strong&gt;http://visualstudiogallery.msdn.microsoft.com/7310649d-87d9-45d2-b7da-99e5b001549e&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/100514/2012010923382389.png" alt="" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div style="display: none;"&gt;current version:0.3&lt;/div&gt;&lt;div style="display: none;"&gt;current version feature:1.增加克隆选中文本功能 (Ctrl + E, Ctrl + E);2.增加新建的文件自动头信息功能（可关闭）;3.增加文件右键在资源管理器中打开功能;4.增加主题功能 (内置7种不同风格主题);5.增加重启功能;6.修复less tab的打开winform窗体出错的一个BUG&lt;/div&gt;&lt;div style="display: none;"&gt;current version update site:http://visualstudiogallery.msdn.microsoft.com/7310649d-87d9-45d2-b7da-99e5b001549e&lt;/div&gt;&lt;img src="http://www.cnblogs.com/qianlifeng/aggbug/2317625.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/qianlifeng/archive/2012/01/09/2317625.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
