<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Python on 计步啦</title>
    <link>http://www.99steps.cn/tags/python/</link>
    <description>Recent content in Python on 计步啦</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <copyright>Vika Zhou</copyright>
    <lastBuildDate>Wed, 11 Oct 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://www.99steps.cn/tags/python/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>在python使用win32com库来读取excel</title>
      <link>http://www.99steps.cn/posts/use-win32com-to-read-excel-in-python/</link>
      <pubDate>Wed, 11 Oct 2023 00:00:00 +0000</pubDate>
      <guid>http://www.99steps.cn/posts/use-win32com-to-read-excel-in-python/</guid>
      <description>&lt;p&gt;在python语言读取excel的有多种库可以实现。这里在windows下通过&lt;code&gt;pywin32&lt;/code&gt;调用Microsoft Excel软件的COM对象接口来实现，使用的API与VBA类似。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装pywin32库&#34;&gt;安装pywin32库&lt;/h2&gt;&#xA;&lt;p&gt;python下安装库首选使用&lt;code&gt;pip&lt;/code&gt;。如果使用virtualenv的话，也可以先为工程一个新的virtualenv, 再在virtualenv环境中安装。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m pip install pywin32&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;打开excel文件读取单元格内容&#34;&gt;打开Excel文件，读取单元格内容&lt;/h2&gt;&#xA;&lt;p&gt;读取excel的流程， 肯定是先打开一个文件， 创建workbook对象， 再从workbook中获取worksheet对象，worksheet即sheet页，然后读取worksheet中的单元格内容。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; win32com.client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 连接excel应用，不显示窗口&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xl_app &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; win32com&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;client&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;DispatchEx(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Excel.Application&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xl_app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;DisplayAlerts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xl_app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Visible &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 打开文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;workbook &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; xl_app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Workbooks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;some.xlsx&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;worksheet &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; workbook&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Worksheets(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Sheet1&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#打印单元格内容&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(worksheet&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Range(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;A1&amp;#39;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#关闭&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;workbook&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Close(&lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xl_app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Quit()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;获取单元格属性&#34;&gt;获取单元格属性&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cell &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; worksheet&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Range(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;A1&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 坐标&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Address)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 是否为合并单元格&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;MergeCells:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;MergeArea, cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;MergeArea&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Columns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Count, cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;MergeArea&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Rows&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Count)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 对齐方式&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;HorizontalAlignment)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 字体&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Font&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Bold, cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Font&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Size)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 背景色&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(cell&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Interior&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ColorIndex)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;microsoft-vba-参考&#34;&gt;Microsoft VBA 参考&lt;/h1&gt;&#xA;&lt;p&gt;Excel中API中使用还是得看官方文档，请访问 &lt;a href=&#34;https://learn.microsoft.com/en-us/office/vba/api/excel.range(object)&#34;&gt;https://learn.microsoft.com/en-us/office/vba/api/excel.range(object)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用poetry来管理python依赖</title>
      <link>http://www.99steps.cn/posts/use-poetry-to-run-python/</link>
      <pubDate>Tue, 26 Sep 2023 00:00:00 +0000</pubDate>
      <guid>http://www.99steps.cn/posts/use-poetry-to-run-python/</guid>
      <description>&lt;p&gt;开发python时通常会使用&lt;code&gt;virtualenv&lt;/code&gt;来创建独立的依赖环境，而使用&lt;code&gt;pip&lt;/code&gt;来安装依赖包，依赖包版本写在文件&lt;code&gt;requirements.txt&lt;/code&gt;中。工具&lt;code&gt;poetry&lt;/code&gt;可以同时完成&lt;code&gt;virtualenv&lt;/code&gt;与&lt;code&gt;pip&lt;/code&gt;的工具，为每一个项目单独创建virtualenv环境， 而且像&lt;code&gt;npm&lt;/code&gt;管理&lt;code&gt;nodejs&lt;/code&gt;的依赖包版本与安装依赖包一样， &lt;code&gt;poetry&lt;/code&gt;会安装依赖，将项目信息与依赖包写入&lt;code&gt;pyproject.toml&lt;/code&gt;文件中， 是python开发好助手。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装-peotry&#34;&gt;安装 peotry&lt;/h2&gt;&#xA;&lt;p&gt;官网 &lt;a href=&#34;https://python-poetry.org/&#34;&gt;https://python-poetry.org/&lt;/a&gt;, 安装要求Python3.8+&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -sSL https://install.python-poetry.org | python3 -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;poetry --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python3 -m poetry --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;初始化项目&#34;&gt;初始化项目&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;新建项目文件夹 &lt;code&gt;poetry new poetry-demo&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;在已有项目文件夹下初始化 &lt;code&gt;poetry init&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;安装依赖&#34;&gt;安装依赖&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;新增一个依赖包 &lt;code&gt;poetry add requests&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;安装依赖包 &lt;code&gt;poetry install&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;运行&#34;&gt;运行&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;poetry run python app.py&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create web app with Python sanic</title>
      <link>http://www.99steps.cn/posts/create-web-app-with-python-sanic/</link>
      <pubDate>Fri, 22 Sep 2023 00:00:00 +0000</pubDate>
      <guid>http://www.99steps.cn/posts/create-web-app-with-python-sanic/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://sanic.dev/en/&#34;&gt;sanic&lt;/a&gt; 是一个轻量、快速的python web框架，提供与&lt;code&gt;Flask&lt;/code&gt; 类似的API, 创建restful API接口超轻松。&lt;/p&gt;&#xA;&lt;p&gt;简单示例&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; sanic &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Sanic&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; sanic.response &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; text&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Sanic(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyHelloWorldApp&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@app.get&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hello_world&lt;/span&gt;(request):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; text(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    app&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run(debug&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;, access_log&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
