Site updated: 2020-01-19 12:07:37
This commit is contained in:
141
article/about/index.html
Normal file
141
article/about/index.html
Normal file
@@ -0,0 +1,141 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="关于我们,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="关于我们 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/about/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/flypython.png">
|
||||
<meta property="og:description" content="关于我们--关于飞蟒Python">
|
||||
<meta name="description" content="关于我们--关于飞蟒Python">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>关于我们 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">关于我们</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2018-01-01</span> | <span>Category:</span><span><a href="/fly/Python入门/" title="Python入门">Python入门</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<h2 id="关于我们"><a href="#关于我们" class="headerlink" title="关于我们"></a>关于我们</h2><p><a href="http://flypython.com" target="_blank" rel="noopener">http://flypython.com</a></p>
|
||||
<h4 id="关于FlyPython"><a href="#关于FlyPython" class="headerlink" title="关于FlyPython"></a>关于FlyPython</h4><p>FlyPython是提供一站式Python编程学习的组织,我们致力于为用户提供高效,有趣的学习环境,打造专注于Python的中文学习社区。</p>
|
||||
<h4 id="联系我们"><a href="#联系我们" class="headerlink" title="联系我们"></a>联系我们</h4><p>客服&合作: 微信号 flypython</p>
|
||||
<h4 id="公众号二维码"><a href="#公众号二维码" class="headerlink" title="公众号二维码"></a>公众号二维码</h4><p>FlyPython<br><img src="https://tva1.sinaimg.cn/large/006tNbRwly1gb1q8emoktj309k09k749.jpg" alt></p>
|
||||
<p>FlyPython训练营<br><img src="https://tva1.sinaimg.cn/large/006tNbRwly1gai7aeyheij3076076dgb.jpg" alt></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
188
article/python-new-01/index.html
Normal file
188
article/python-new-01/index.html
Normal file
@@ -0,0 +1,188 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="Python 3.8新特性——赋值表达式,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="Python 3.8新特性——赋值表达式 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-new-01/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/new-01.png">
|
||||
<meta property="og:description" content="Python 3.8新特性——赋值表达式--介绍Python语言新的特性">
|
||||
<meta name="description" content="Python 3.8新特性——赋值表达式--介绍Python语言新的特性">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>Python 3.8新特性——赋值表达式 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">Python 3.8新特性——赋值表达式</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-04-01</span> | <span>Category:</span><span><a href="/fly/Python新特性/" title="Python新特性">Python新特性</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<p>上周,Python3.8版本发布,到底带来了哪些新的特性呢?我们应该在哪些场景中使用这些特性呢?本周,我们通过几篇文章来告诉你答案。</p>
|
||||
<p><img src="https://tva1.sinaimg.cn/large/006tNbRwly1gai72bypmej30u00u9wl1.jpg" alt></p>
|
||||
<h4 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h4><p>首先,我们并不推荐安装最新版本到常用的开发环境中,你可以使用虚拟环境或者docker来尝鲜。</p>
|
||||
<p>官方安装包</p>
|
||||
<p>网址:<code>https://www.python.org/downloads/release/python-380/</code></p>
|
||||
<p>也可以使用docker</p>
|
||||
<p>拉取镜像命令<br><code>docker pull python:3.8</code></p>
|
||||
<h2 id="赋值表达式"><a href="#赋值表达式" class="headerlink" title="赋值表达式"></a>赋值表达式</h2><p><img src="https://tva1.sinaimg.cn/large/006tNbRwly1gai72nu5otj30jg0atdfq.jpg" alt></p>
|
||||
<p>赋值表达式被叫做海象运算符,因为它的形状像海象。如果熟悉go语言的话,会对这个表达式会熟悉。</p>
|
||||
<p>赋值表达式的语法是 </p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">name := expression</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>和赋值语句 <code>=</code> 作用差不多,非必不可少,但可以简化代码。</p>
|
||||
<h4 id="官方示例"><a href="#官方示例" class="headerlink" title="官方示例"></a>官方示例</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">>>> a = False</span><br><span class="line">>>> print(a)</span><br><span class="line">False</span><br><span class="line">>>> print(a := True)</span><br><span class="line">True</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>此例子赋值之后,后续还需要使用变量。赋值表达可用于简化代码,提高可读性。</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">>>> inputs = list()</span><br><span class="line">>>> while True:</span><br><span class="line">... current = input("your input:")</span><br><span class="line">... if current == "quit":</span><br><span class="line">... break</span><br><span class="line">... inputs.append(current)</span><br><span class="line">...</span><br><span class="line">your input:a</span><br><span class="line">your input:b</span><br><span class="line">your input:test</span><br><span class="line">your input:quit</span><br><span class="line">>>> inputs</span><br><span class="line">['a', 'b', 'test']</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>使用赋值操作符时:</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">>>> inputs = list()</span><br><span class="line">>>> while (current := input("your input:")) != "quit":</span><br><span class="line">... inputs.append(current)</span><br><span class="line">...</span><br><span class="line">your input:a</span><br><span class="line">your input:b</span><br><span class="line">your input:test</span><br><span class="line">your input:quit</span><br><span class="line">>>> inputs</span><br><span class="line">['a', 'b', 'test']</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>此例子,省略了一条语句,可读性上升。</p>
|
||||
<p>再来一个例子</p>
|
||||
<p>最初版本</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">a = [1,2,3,4]</span><br><span class="line">if len(a) > 3: #计算 len(a) 一次 </span><br><span class="line"> print(f"a is too long ({len(a)} elements,expected < 3)") # 计算 len(a) 第二次</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>我们改写为:</p>
|
||||
<p>改进版本</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">a = [1,2,3,4]</span><br><span class="line">n = len(a) # 计算一次len(a)</span><br><span class="line">if n > 3: # 多了变量n</span><br><span class="line"> print(f"a is too long ({n} elements,expected < 3)") #</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>新特性重写:<br>重写版本</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">a = [1,2,3,4]</span><br><span class="line">if (n:=len(a)) > 3: # 计算一次len(a),多了变量n,把两行改为一行</span><br><span class="line"> print(f"a is too long ({n} elements,expected < 3)") #</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>从上面可以看到,重写版本和改进版本的不同在于:</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">n = len(a) </span><br><span class="line">if n > 3:</span><br><span class="line"> pass</span><br></pre></td></tr></table></figure>
|
||||
|
||||
|
||||
<p>与</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">if (n:=len(a)) > 3:</span><br><span class="line"> pass</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>这两个版本的区别在于,<code>:=</code>和<code>=</code>是补充关系并不是替换关系,下面的例子可以看到官方的意图。</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">x = 5</span><br><span class="line">print(f"x = {x}")</span><br><span class="line"></span><br><span class="line">#能用=解决的就用=解决</span><br><span class="line">y := 5 # SyntaxError: invalid syntax</span><br><span class="line">print(f"y = {y}")</span><br><span class="line"></span><br><span class="line">(z := 5)</span><br><span class="line">print(f"z = {z}")</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>由上面可以看出<code>:=</code>和<code>=</code>是互补关系,在应该使用<code>:=</code>的时候才可以使用<code>:=</code>。</p>
|
||||
<p>Python语言的一致性,不管是专家还是新手,在同一个问题上都应该有一致的写法,然后这就形成了最pythonic的写法。</p>
|
||||
<p>最后带来,新特性带来的最佳实践</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"># 简化 os.fork </span><br><span class="line">if pid := os.fork():</span><br><span class="line"> # Parent code</span><br><span class="line">else:</span><br><span class="line"> # Child code</span><br><span class="line"></span><br><span class="line"># 直接到把 socket 对象的 read buffer 读完为止</span><br><span class="line">while data := sock.recv(8192):</span><br><span class="line"> print("Received data:", data)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<h4 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h4><ul>
|
||||
<li><a href="https://docs.python.org/zh-cn/3.8/whatsnew/3.8.html" target="_blank" rel="noopener">https://docs.python.org/zh-cn/3.8/whatsnew/3.8.html</a></li>
|
||||
<li><a href="https://www.python.org/dev/peps/pep-0572" target="_blank" rel="noopener">https://www.python.org/dev/peps/pep-0572</a></li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
165
article/python-new-02/index.html
Normal file
165
article/python-new-02/index.html
Normal file
@@ -0,0 +1,165 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="Python 3.8新特性——仅限位置形参,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="Python 3.8新特性——仅限位置形参 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-new-02/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/new-02.png">
|
||||
<meta property="og:description" content="Python 3.8新特性——仅限位置形参--介绍Python语言新的特性">
|
||||
<meta name="description" content="Python 3.8新特性——仅限位置形参--介绍Python语言新的特性">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>Python 3.8新特性——仅限位置形参 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">Python 3.8新特性——仅限位置形参</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-04-02</span> | <span>Category:</span><span><a href="/fly/Python新特性/" title="Python新特性">Python新特性</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<h2 id="仅限位置形参"><a href="#仅限位置形参" class="headerlink" title="仅限位置形参"></a>仅限位置形参</h2><p>Positional-only parameters官方翻译为仅限位置形参,也可以理解为只接受位置参数。意思就是,它只是一个位置参数,不接受关键字传参。</p>
|
||||
<p>语法: </p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">def funx(a,b,/): # / 指明,前面的a,b参数是仅限位置形参</span><br><span class="line"> pass</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>函数形参语法<code>/</code> 用来指明某些函数形参必须使用仅限位置而非关键字参数</p>
|
||||
<p>其实,Python内置的很多C函数接口都是这种形式,比如</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">>>> import builtins</span><br><span class="line">>>> help(__builtins__.divmod)</span><br><span class="line">Help on built-in function divmod in module builtins:</span><br><span class="line"></span><br><span class="line">divmod(x, y, /)</span><br><span class="line"> Return the tuple (x//y, x%y). Invariant: div*y + mod == x.</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>很多函数后面都有 <code>/</code>来表明,左边的这些参数只接受位置参数。</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">>>> divmod(1,2)</span><br><span class="line">(0, 1)</span><br><span class="line">>>> divmod(x=1,y=2) </span><br><span class="line">Traceback (most recent call last):</span><br><span class="line"> File "<stdin>", line 1, in <module></span><br><span class="line">TypeError: divmod() takes no keyword arguments</span><br><span class="line">>>></span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>指定关键字的参数会报语法错误,它的用途就是强制使用者用位置参数来传参。</p>
|
||||
<h4 id="官方例子"><a href="#官方例子" class="headerlink" title="官方例子"></a>官方例子</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">>>> def f(a,b,/,**kwargs):</span><br><span class="line">... print(a,b,kwargs)</span><br><span class="line">...</span><br><span class="line">>>> f(10,20,a=1,b=2,c=3)</span><br><span class="line">10 20 {'a': 1, 'b': 2, 'c': 3}</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>由于在 <code>/</code> 左侧的形参不会被公开为可用关键字</p>
|
||||
<p>这里的a,b 为仅限位置参数,最后a,b会被赋值了两次。<br>位置参数赋值一次,关键字参数赋值一次,关键字参数以kwargs字典的形式存在,需要通过 <code>kwargs['a'],kwargs['b']</code>访问。</p>
|
||||
<p>现在我们来看一下,添加了仅限位置形参之后的函数参数形式</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">def name(positional_only_parameters, /, positional_or_keyword_parameters,</span><br><span class="line"> *, keyword_only_parameters):</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>包括了仅限位置形参, <code>/</code>, 位置形参或者关键字参数 ,<code>*</code>,仅限关键字参数。</p>
|
||||
<p><img src="https://tva1.sinaimg.cn/large/006tNbRwly1gai73g9r3ej30so09mq3k.jpg" alt></p>
|
||||
<p>最后,我们可以定义以下形式的函数</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">def name(p1, p2, /, p_or_kw, *, kw):</span><br><span class="line">def name(p1, p2=None, /, p_or_kw=None, *, kw):</span><br><span class="line">def name(p1, p2=None, /, *, kw):</span><br><span class="line">def name(p1, p2=None, /):</span><br><span class="line">def name(p1, p2, /, p_or_kw):</span><br><span class="line">def name(p1, p2, /):</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<h4 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h4><ul>
|
||||
<li><a href="https://docs.python.org/zh-cn/3.8/whatsnew/3.8.html" target="_blank" rel="noopener">https://docs.python.org/zh-cn/3.8/whatsnew/3.8.html</a></li>
|
||||
<li><a href="https://docs.python.org/zh-cn/3/howto/clinic.html" target="_blank" rel="noopener">https://docs.python.org/zh-cn/3/howto/clinic.html</a></li>
|
||||
<li><a href="https://www.python.org/dev/peps/pep-0570" target="_blank" rel="noopener">https://www.python.org/dev/peps/pep-0570</a></li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
157
article/python-nlp-01/index.html
Normal file
157
article/python-nlp-01/index.html
Normal file
@@ -0,0 +1,157 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="使用 Python 生成《红楼梦》词云,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="使用 Python 生成《红楼梦》词云 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-nlp-01/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/nlp1.png">
|
||||
<meta property="og:description" content="使用 Python 生成《红楼梦》词云--Python自然语言处理教程">
|
||||
<meta name="description" content="使用 Python 生成《红楼梦》词云--Python自然语言处理教程">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>使用 Python 生成《红楼梦》词云 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">使用 Python 生成《红楼梦》词云</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-03-01</span> | <span>Category:</span><span><a href="/fly/自然语言处理/" title="自然语言处理">自然语言处理</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<p>使用 Python 生成《红楼梦》词云</p>
|
||||
<p><img src="http://jcjview.github.io/img/1210058744_15500375990201n.jpg" alt></p>
|
||||
<p>本文介绍如何使用python绘制《红楼梦》的词云。</p>
|
||||
<blockquote>
|
||||
<p>“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。<br><a href="http://media.people.com.cn/GB/22100/61748/61749/4281906.html" target="_blank" rel="noopener">“词云”——网络内容发布新招式 .人民网</a></p>
|
||||
</blockquote>
|
||||
<h2 id="0-摘要"><a href="#0-摘要" class="headerlink" title="0.摘要"></a>0.摘要</h2><p><strong>本文建议在电脑上打开,边阅读边操作。</strong></p>
|
||||
<ol>
|
||||
<li>安装python词云工具wordcloud,画图软件matplotlib</li>
|
||||
<li>准备红楼梦文本</li>
|
||||
<li>编写python代码并运行</li>
|
||||
<li>展示词云结果</li>
|
||||
</ol>
|
||||
<h2 id="1-安装wordcloud"><a href="#1-安装wordcloud" class="headerlink" title="1.安装wordcloud"></a>1.安装wordcloud</h2><p>可以在cmd窗口输入<figure class="highlight plain"><figcaption><span>install wordcloud matplotlib```</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">## 2.准备红楼梦文本</span><br><span class="line"></span><br><span class="line">文本可以用下面链接下载</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">`https://github.com/flypythoncom/flypython/blob/master/wordcloud_hlm_seg.txt`</span><br><span class="line"></span><br><span class="line">或者可以自己写代码,对文本进行清洗,分词。</span><br><span class="line">这里需要安装jieba分词,`pip install jieba`</span><br><span class="line">``` python</span><br><span class="line">import jieba</span><br><span class="line">import re</span><br><span class="line"></span><br><span class="line">special_character_removal = re.compile(r'[,。、【 】“”:;()《》‘’{}?!⑦%>℃.^-——=&#@¥『』]', re.IGNORECASE)</span><br><span class="line"></span><br><span class="line">fw=open("hlm_seg.txt","w",encoding="utf-8")</span><br><span class="line"></span><br><span class="line">with open('hlm.txt',encoding="utf-8") as fp:</span><br><span class="line"> for line in fp:</span><br><span class="line"> l = special_character_removal.sub('', line.strip())</span><br><span class="line"> words=jieba.cut(l)</span><br><span class="line"> t=" ".join(words)</span><br><span class="line"> fw.write(t)</span><br><span class="line"> fw.write("\n")</span><br><span class="line"> </span><br><span class="line">fw.close()</span><br></pre></td></tr></table></figure></p>
|
||||
<h2 id="3-编写词云python代码并运行"><a href="#3-编写词云python代码并运行" class="headerlink" title="3. 编写词云python代码并运行"></a>3. 编写词云python代码并运行</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> os <span class="keyword">import</span> path </span><br><span class="line"><span class="keyword">from</span> wordcloud <span class="keyword">import</span> WordCloud</span><br><span class="line"></span><br><span class="line">d = path.dirname(__file__) </span><br><span class="line"><span class="comment"># Read the whole text. </span></span><br><span class="line">text = open(path.join(d, <span class="string">'hlm_seg.txt'</span>),encoding=<span class="string">"utf-8"</span>).read() </span><br><span class="line"><span class="comment"># Generate a word cloud image </span></span><br><span class="line"><span class="comment"># font=path.join(d, "simkai.ttf") </span></span><br><span class="line">font=<span class="string">'C:/Windows/Fonts/simkai.ttf'</span> </span><br><span class="line">wordcloud = WordCloud(font_path=font,<span class="comment">#设置中文字体,不指定就会出现中文不显示 </span></span><br><span class="line"> width=<span class="number">1024</span>,<span class="comment">#宽 </span></span><br><span class="line"> height=<span class="number">840</span>,<span class="comment">#高 </span></span><br><span class="line"> background_color=<span class="string">'white'</span>,<span class="comment">#设置背景色 </span></span><br><span class="line"> <span class="comment"># max_words=100,#最大词汇数 </span></span><br><span class="line"> <span class="comment"># max_font_size=100#最大号字体 </span></span><br><span class="line"> ).generate(text) </span><br><span class="line"> </span><br><span class="line"><span class="comment"># Display the generated image: </span></span><br><span class="line"><span class="comment"># the matplotlib way: </span></span><br><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt </span><br><span class="line"> </span><br><span class="line">plt.figure() </span><br><span class="line">plt.imshow(wordcloud) </span><br><span class="line">plt.axis(<span class="string">"off"</span>) </span><br><span class="line">plt.show()</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>结果:</p>
|
||||
<p><img src="http://jcjview.github.io/img/Figure_1.png" alt="词云运行结果"></p>
|
||||
<p>后台回复“词云”获得完整运行代码</p>
|
||||
<p><em>人生苦短,我用python早下班。如果觉得不错,对你工作中有帮助,请加我微信公众号flypython,我们一起探讨python相关问题</em></p>
|
||||
<p> <img src="https://flypython.com/images/wechat.png" alt="flypython微信公众号"></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
174
article/python-oa-01/index.html
Normal file
174
article/python-oa-01/index.html
Normal file
@@ -0,0 +1,174 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="Python写入Excel表格,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="Python写入Excel表格 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-oa-01/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/oa1.jpg">
|
||||
<meta property="og:description" content="Python写入Excel表格--极简Python自动化办公系列">
|
||||
<meta name="description" content="Python写入Excel表格--极简Python自动化办公系列">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>Python写入Excel表格 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">Python写入Excel表格</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-01-01</span> | <span>Category:</span><span><a href="/fly/自动化办公/" title="自动化办公">自动化办公</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<h1 id="【极简Python-自动化办公】Python写入Excel表格"><a href="#【极简Python-自动化办公】Python写入Excel表格" class="headerlink" title="【极简Python 自动化办公】Python写入Excel表格"></a>【极简Python 自动化办公】Python写入Excel表格</h1><blockquote>
|
||||
<p>【极简Python 自动化办公】专栏是介绍如何利用python办公,减少工作负荷。篇幅精炼,内容易懂,无论是否有编程基础,都非常适合。</p>
|
||||
</blockquote>
|
||||
<p>在上次文章中,我们学习了【用python读取excel】,这次我们继续学习Python写excel吧!</p>
|
||||
<p><img src="http://jcjview.github.io/img/flypythonpython-excel-tutorial.jpg" alt></p>
|
||||
<h2 id="0-摘要"><a href="#0-摘要" class="headerlink" title="0.摘要"></a>0.摘要</h2><p><strong>本文大约需要15分钟,建议在电脑上打开,边阅读边操作。</strong></p>
|
||||
<ol>
|
||||
<li>安装Python读excel模块——xlwt</li>
|
||||
<li>准备写入表格内容</li>
|
||||
<li>编写python代码并运行</li>
|
||||
<li>使用for循环语句读取并写入excel表格</li>
|
||||
</ol>
|
||||
<h2 id="1-安装xlwt"><a href="#1-安装xlwt" class="headerlink" title="1.安装xlwt"></a>1.安装xlwt</h2><p>与上篇文章类似,需要在cmd窗口输入<figure class="highlight plain"><figcaption><span>install xlwt```。</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"></span><br><span class="line">## 2.准备写入表格内容</span><br><span class="line"></span><br><span class="line">这步很简单,只要想好输入内容即可,这里设计了一个简单的表格内容作为写入内容(目前这个内容还不存在)。</span><br><span class="line"></span><br><span class="line">| 序号 | 学号 |年龄 |</span><br><span class="line">| --- | --- |--- |</span><br><span class="line">| 张三 | 20190901 |11|</span><br><span class="line">| 李四 |20190902|12 |</span><br><span class="line">| 小明 | 20190903 |13 |</span><br><span class="line"></span><br><span class="line">## 3.编写python代码并运行</span><br><span class="line"></span><br><span class="line">新建一个writeexcel.py文件,用记事本或其他文本编辑工具打开。</span><br><span class="line"></span><br><span class="line">本次写入excel的思路是,新建文件->指定行列->写入内容。</span><br><span class="line"></span><br><span class="line">在文本编辑工具中输入如下代码,保存并关闭。</span><br></pre></td></tr></table></figure></p>
|
||||
<p>import xlwt</p>
|
||||
<p>f = xlwt.Workbook()<br>sheet1 = f.add_sheet(‘sheet1’,cell_overwrite_ok=True)<br>column = [“姓名”,”学号”,”年龄”]<br>name = [“张三”,”李四”,”小明”]</p>
|
||||
<p>school_code = [20190901,20190902,20190903]</p>
|
||||
<p>age = [11,12,13]</p>
|
||||
<p>sheet1.write(0,0,column[0])#第1行第1列<br>sheet1.write(0,1,column[1])#第3行第3列<br>sheet1.write(0,2,column[2])#第2行第2列</p>
|
||||
<p>sheet1.write(1,0,name[0])#第2行第1列<br>sheet1.write(1,1,school_code[0])#第2行第1列<br>sheet1.write(1,2,age[0])#第3行第1列</p>
|
||||
<p>sheet1.write(2,0,name[1])<br>sheet1.write(2,1,school_code[1])<br>sheet1.write(2,2,age[1])</p>
|
||||
<p>sheet1.write(3,0,name[2])<br>sheet1.write(3,1,school_code[2])<br>sheet1.write(3,2,age[2])</p>
|
||||
<p>f.save(‘test1.xls’)</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">还是一样,注意每句的开头不可以有空格,因为python用*缩进*来表示编程的层次,缩进不同就会报错了。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">在保存writeexcel.py的位置上打开cmd,运行 python writeexcel.py</span><br><span class="line">可以看到结果:</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">## 4.使用for循环语句读取并写入excel表格</span><br><span class="line"></span><br><span class="line">非常好!您已经学会了如何读取和写入excel表格。</span><br><span class="line"></span><br><span class="line">但是,我们只能一个一个单元格读取和写入数据,这比手工操作excel表格快不了多少。</span><br><span class="line"></span><br><span class="line">接下来,我们需要学习使用for循环,来批量读取一个excel表格,并循环写入另一个excel表格中。</span><br><span class="line"></span><br><span class="line">不要删除test1.xls,在test1.xls文件的位置,新建一个rwexcel.py文件,将下面代码输入到文件中:</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>import xlrd<br>import xlwt</p>
|
||||
<p>wb = xlrd.open_workbook(“test1.xls”)#打开文件<br>sheet1 = wb.sheet_by_index(0)#获取第一个表格</p>
|
||||
<p>column = []#列名</p>
|
||||
<p>data=[]</p>
|
||||
<p>#获取列名<br>column.append(sheet1.cell(0,0).value)#姓名<br>column.append(sheet1.cell(0,1).value)#学号<br>column.append(sheet1.cell(0,2).value)#年龄</p>
|
||||
<p>for i in range(1,sheet1.nrows):#sheet1.nrows 行数<br> coldata=[]<br> coldata.append(sheet1.cell(i, 0).value)#姓名<br> coldata.append(int(sheet1.cell_value(i, 1)))#学号<br> coldata.append(sheet1.cell(i, 2).value)#年龄<br> data.append(coldata)</p>
|
||||
<p>f = xlwt.Workbook()<br>sheetw = f.add_sheet(‘sheet1’,cell_overwrite_ok=True)</p>
|
||||
<p>sheetw.write(0,0,column[0])#姓名<br>sheetw.write(0,2,column[2])#学号<br>sheetw.write(0,1,column[1])#年龄</p>
|
||||
<p>for i in range(len(data)):<br> d=data[i]<br> sheetw.write(i+1, 0, d[0]) # 第2行第1列<br> sheetw.write(i+1, 1, d[1]) # 第2行第1列<br> sheetw.write(i+1, 2, d[2]) # 第3行第1列</p>
|
||||
<p>f.save(‘test2.xls’)</p>
|
||||
<p>```</p>
|
||||
<p>运行后,会生成一个test2.xls,与test1.xls一模一样。</p>
|
||||
<p><em>人生苦短,我用python早下班。如果觉得不错,对你工作中有帮助,请加我微信公众号flypython,我们一起探讨python相关问题</em></p>
|
||||
<p> <img src="https://flypython.com/images/wechat.png" alt="flypython微信公众号"></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
229
article/python-oa-02/index.html
Normal file
229
article/python-oa-02/index.html
Normal file
@@ -0,0 +1,229 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="Python写入Word文档,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="Python写入Word文档 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-oa-02/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/oa2.jpg">
|
||||
<meta property="og:description" content="Python写入Word文档--极简Python自动化办公系列">
|
||||
<meta name="description" content="Python写入Word文档--极简Python自动化办公系列">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>Python写入Word文档 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">Python写入Word文档</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-01-02</span> | <span>Category:</span><span><a href="/fly/自动化办公/" title="自动化办公">自动化办公</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<blockquote>
|
||||
<p>【极简Python 自动化办公】专栏是介绍如何利用python办公,减少工作负荷。篇幅精炼,内容易懂,无论是否有编程基础,都非常适合。</p>
|
||||
</blockquote>
|
||||
<p>在上次文章中,我们学习了【用python写入excel】,这次我们学习Python写word文档吧!</p>
|
||||
<p>场景:<br>有时候,办公室需要按模版生成的固定的文件,模板是固定的,只是每次需要替换信息。如下图的收入证明,模版中所有标黄的都是需要替换的信息:<br><img src="http://jcjview.github.io/img/pythonword_model0.png" alt><br>如果手工来做这个事情,每次至少需要10分钟的时间。假如每天要开15份,则至少要花2个半小时,而且手工编辑word很容易出错。</p>
|
||||
<p>可不可用python写个程序,解决这个问题呢?</p>
|
||||
<p>结论当然是肯定的!</p>
|
||||
<h2 id="0-摘要"><a href="#0-摘要" class="headerlink" title="0.摘要"></a>0.摘要</h2><p><strong>本文大约需要15分钟,建议在电脑上打开,边阅读边操作。</strong></p>
|
||||
<ol>
|
||||
<li>安装Python读写word模块,python-docx</li>
|
||||
<li>准备word模板,准备写入word文档内容</li>
|
||||
<li>编写python代码并运行</li>
|
||||
<li>通过读取excel表格中的信息,批量生成word文件</li>
|
||||
</ol>
|
||||
<h2 id="1-安装python-docx模块"><a href="#1-安装python-docx模块" class="headerlink" title="1.安装python-docx模块"></a>1.安装python-docx模块</h2><p>与上篇文章类似,需要在cmd窗口输入<code>pip install python-docx</code>。<br><img src="http://jcjview.github.io/img/flypython_python_docx_pip.png" alt></p>
|
||||
<h2 id="2-准备word模板,准备写入word文档内容"><a href="#2-准备word模板,准备写入word文档内容" class="headerlink" title="2.准备word模板,准备写入word文档内容"></a>2.准备word模板,准备写入word文档内容</h2><p>word模板如上所示,(可以不需要标黄),这里注意,需要替换的文字或数字位置,用”XXXX”来固定替代。保存为<code>个人收入证明.docx</code>。</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>名称</th>
|
||||
<th>内容</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td>姓名</td>
|
||||
<td>张三</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>身份证号</td>
|
||||
<td>104111199009103531</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>职务</td>
|
||||
<td>工程师</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>工作年限</td>
|
||||
<td>10</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>月收入</td>
|
||||
<td>10000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>大写</td>
|
||||
<td>壹万元整</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>联系人</td>
|
||||
<td>李四</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>单位名称</td>
|
||||
<td>格物致知股份有限公司</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>单位地址</td>
|
||||
<td>珠海市横琴新区宝华路6号105室-67425</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>联系电话</td>
|
||||
<td>0756-8627528</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<h2 id="3-编写python代码并运行"><a href="#3-编写python代码并运行" class="headerlink" title="3. 编写python代码并运行"></a>3. 编写python代码并运行</h2><p>在word模板的同级目录,新建一个writeword.py文件,用记事本或其他文本编辑工具打开。</p>
|
||||
<p>编程思路:</p>
|
||||
<ol>
|
||||
<li>用python打开对应doc模板</li>
|
||||
<li>按顺序找到每一个需要替换的位置字符”XXXX”,替换为对应的内容</li>
|
||||
<li>另存为doc为另一个文件</li>
|
||||
</ol>
|
||||
<p>在文本编辑工具中输入如下代码,保存并关闭。</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">from docx import Document</span><br><span class="line">#准备写入内容</span><br><span class="line">name="张三"</span><br><span class="line">id_code="104111199009103531"</span><br><span class="line">career="工程师"</span><br><span class="line">working_years="10"</span><br><span class="line">salary="10000"</span><br><span class="line">salary_uppercase="壹万元整"</span><br><span class="line">contact="李四"</span><br><span class="line">company="格物厚德股份有限公司"</span><br><span class="line">address="珠海市横琴新区宝华路6号105室-67425"</span><br><span class="line">tel="0756-8627528"</span><br><span class="line">#打开doc</span><br><span class="line"></span><br><span class="line">textlist=[name,id_code,career,working_years,salary,salary_uppercase,company,address,contact,tel]</span><br><span class="line"></span><br><span class="line">doc = Document("个人收入证明.docx")</span><br><span class="line"></span><br><span class="line">count=0</span><br><span class="line"></span><br><span class="line">for p in doc.paragraphs:</span><br><span class="line"> if 'XXXX' in p.text:</span><br><span class="line"> inline = p.runs</span><br><span class="line"> for i in range(len(inline)):</span><br><span class="line"> if 'XXXX' in inline[i].text:</span><br><span class="line"> text = inline[i].text.replace('XXXX', textlist[count])</span><br><span class="line"> inline[i].text = text</span><br><span class="line"> count+=1</span><br><span class="line"> print(count)</span><br><span class="line">doc.save("%s_个人收入证明.docx"%name)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>在同级目录,打开cmd,运行writeword.py <code>python writeword.py</code></p>
|
||||
<p>生成结果如下:<br><code>张三_个人收入证明.docx</code><br><img src="http://jcjview.github.io/img/pythonword2.png" alt></p>
|
||||
<h2 id="4-通过读取excel表格中的信息,批量生成word文件"><a href="#4-通过读取excel表格中的信息,批量生成word文件" class="headerlink" title="4.通过读取excel表格中的信息,批量生成word文件"></a>4.通过读取excel表格中的信息,批量生成word文件</h2><p>这里生成了对应word文件,但也有几个问题:</p>
|
||||
<ol>
|
||||
<li>对应的日期并没有自动填写,应当填写文件生成时对应的日期</li>
|
||||
<li>如果是生成大量同样word文档的话,目前的程序也需要一个一个改,并没有提升太多效率</li>
|
||||
</ol>
|
||||
<p>如果您看过我们之前的2篇用python读写excel的文章,您肯定就会想到,可以利用读取excel表格里的内容,批量生成对应的word文档。对,让我们继续吧!</p>
|
||||
<p>这里再准备一个excel文件,将需要批量写入的信息写在excel中,并保存为income.xlsx在同级目录,如下图:</p>
|
||||
<p><img src="http://jcjview.github.io/img/pythonword23.png" alt></p>
|
||||
<p>修改python 文件writeword.py</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line">from docx import Document</span><br><span class="line">#准备写入内容</span><br><span class="line">import xlrd</span><br><span class="line">import time</span><br><span class="line"># 当前时间元组</span><br><span class="line">from datetime import datetime</span><br><span class="line">nt=datetime.now()</span><br><span class="line"># 可以输入中文年月日</span><br><span class="line">datestr=nt.strftime('%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日')</span><br><span class="line"></span><br><span class="line">xlsx=xlrd.open_workbook('income.xlsx')</span><br><span class="line">sheet=xlsx.sheet_by_index(0)</span><br><span class="line">for row in range(1,sheet.nrows):</span><br><span class="line"> doc = Document("个人收入证明.docx")</span><br><span class="line"> count=0</span><br><span class="line"> textlist=[]</span><br><span class="line"> for col in range(0,sheet.ncols):</span><br><span class="line"> textlist.append(str(sheet.cell_value(row, col)))</span><br><span class="line"></span><br><span class="line"> for p in doc.paragraphs:</span><br><span class="line"> if 'XXXX' in p.text:</span><br><span class="line"> inline = p.runs</span><br><span class="line"> for i in range(len(inline)):</span><br><span class="line"> if 'XXXX' in inline[i].text:</span><br><span class="line"> text = inline[i].text.replace('XXXX', textlist[count])</span><br><span class="line"> inline[i].text = text</span><br><span class="line"> count+=1</span><br><span class="line"> if 'X 年 X 月 X 日' in p.text:</span><br><span class="line"> inline = p.runs</span><br><span class="line"> for i in range(len(inline)):</span><br><span class="line"> if 'X 年 X 月 X 日' in inline[i].text:</span><br><span class="line"> text = inline[i].text.replace('X 年 X 月 X 日', datestr)</span><br><span class="line"> inline[i].text = text</span><br><span class="line"></span><br><span class="line"> doc.save("%s_个人收入证明.docx"%textlist[0])</span><br></pre></td></tr></table></figure>
|
||||
|
||||
|
||||
<p> 运行后,输入结果:</p>
|
||||
<p><img src="http://jcjview.github.io/img/pythonword3.png" alt></p>
|
||||
<p><img src="http://jcjview.github.io/img/pythonword4.png" alt></p>
|
||||
<p><em>人生苦短,我用python早下班。如果觉得不错,对你工作中有帮助,请加我微信公众号flypython,我们一起探讨python相关问题</em></p>
|
||||
<p> <img src="https://flypython.com/images/wechat.png" alt="flypython微信公众号"></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
164
article/python-oa-03/index.html
Normal file
164
article/python-oa-03/index.html
Normal file
@@ -0,0 +1,164 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="Python批量转换任意文档格式,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="Python批量转换任意文档格式 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-oa-03/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/oa3.jpg">
|
||||
<meta property="og:description" content="Python批量转换任意文档格式--极简Python自动化办公系列">
|
||||
<meta name="description" content="Python批量转换任意文档格式--极简Python自动化办公系列">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>Python批量转换任意文档格式 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">Python批量转换任意文档格式</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-01-03</span> | <span>Category:</span><span><a href="/fly/自动化办公/" title="自动化办公">自动化办公</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<p>在工作中,常常会遇到文档格式的转换。如果数据不多,手工转换就可以。如果是大量文档,那我们应该怎么办呢?</p>
|
||||
<p>今天我们将使用Python来批量处理文档转换的问题.</p>
|
||||
<h4 id="关于unoconv"><a href="#关于unoconv" class="headerlink" title="关于unoconv"></a>关于unoconv</h4><p>unoconv是一款跨平台的工具,用于格式转换,支持命令行。底层实现是依赖于开源的LibreOffice/OpenOffice。</p>
|
||||
<p>项目地址:<a href="https://github.com/unoconv/unoconv" target="_blank" rel="noopener">https://github.com/unoconv/unoconv</a></p>
|
||||
<p>文档地址: <a href="http://dag.wiee.rs/home-made/unoconv/" target="_blank" rel="noopener">http://dag.wiee.rs/home-made/unoconv/</a></p>
|
||||
<p>根据unoconv的文档介绍,支持上百种文档格式的转换,已经覆盖了绝大部分的需求。</p>
|
||||
<h4 id="使用unoconv"><a href="#使用unoconv" class="headerlink" title="使用unoconv"></a>使用unoconv</h4><p>安装unoconv比较繁琐,而且需要针对中文进行进一步的字符集配置。我们可以选择别人已经集成好的服务来进行操作,在这里我们选择了docker-unoconv-webservice项目。</p>
|
||||
<p>项目地址为: <a href="https://github.com/zrrrzzt/docker-unoconv-webservice" target="_blank" rel="noopener">https://github.com/zrrrzzt/docker-unoconv-webservice</a></p>
|
||||
<p>查看项目的README,接口如下: </p>
|
||||
<p><code>curl --form file=@myfile.docx http://localhost/unoconv/pdf > myfile.pdf</code></p>
|
||||
<p>我们使用下列命令,先把项目的镜像pull下来</p>
|
||||
<p><code>docker pull zrrrzzt/docker-unoconv-webservice</code></p>
|
||||
<p>然后启动命令如下:</p>
|
||||
<p><code>docker run -d -p 80:3000 zrrrzzt/docker-unoconv-webservice</code></p>
|
||||
<p>服务在80端口上提供服务,如果80端口被占用,可以调整为其他的端口</p>
|
||||
<p>确认服务正在运行:</p>
|
||||
<p><code>docker ps | grep zrrrzzt/docker-unoconv-webservice</code></p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[flypython] docker ps | grep zrrrzzt/docker-unoconv-webservice </span><br><span class="line">c014cf335b31 zrrrzzt/docker-unoconv-webservice "/bin/sh -c '/usr/bi…" 2 minutes ago Up 2 minutes 0.0.0.0:80->3000/tcp brave_blackburn</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>从docx转换为pdf:</p>
|
||||
<p><code>curl --form file=@demo.docx http://localhost/unoconv/pdf > demo.pdf</code> </p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[flypython] curl --form file=@demo.docx http://localhost/unoconv/pdf > demo.pdf </span><br><span class="line"> % Total % Received % Xferd Average Speed Time Time Time Current</span><br><span class="line"> Dload Upload Total Spent Left Speed</span><br><span class="line">100 12089 100 4242 100 7847 2532 4684 0:00:01 0:00:01 --:--:-- 7213</span><br><span class="line">[flypython] ls demo* </span><br><span class="line">demo.docx demo.pdf</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<h4 id="使用Python批量请求"><a href="#使用Python批量请求" class="headerlink" title="使用Python批量请求"></a>使用Python批量请求</h4><p>Python批量请求的思路是,把需要转换的文档发送到服务器,服务器会返回转换后的格式,我们保存为文件就可以了。</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">def post_file(url,path):</span><br><span class="line"> filename = os.path.basename(path)</span><br><span class="line"> convert_name = str(filename).split('.')[0] + '.pdf'</span><br><span class="line"></span><br><span class="line"> m = MultipartEncoder(</span><br><span class="line"> fields= {</span><br><span class="line"> 'file':(filename,open(path,'rb')),</span><br><span class="line"> }</span><br><span class="line"> )</span><br><span class="line"> response = requests.request('POST', url, data=m, headers={'Content-Type':m.content_type})</span><br><span class="line"></span><br><span class="line"> with open(convert_name, 'wb') as f:</span><br><span class="line"> f.write(response.content)</span><br><span class="line"></span><br><span class="line"> return convert_name</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>好了,更多类型转换,更完整的应用需要你根据业务来完善,这次的介绍就到这里了。demo完整代码在github上,点击原文可以获取。</p>
|
||||
<p><a href="https://github.com/flypythoncom/flypython/blob/master/convert.py" target="_blank" rel="noopener">https://github.com/flypythoncom/flypython/blob/master/convert.py</a></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
174
article/python-oa-04/index.html
Normal file
174
article/python-oa-04/index.html
Normal file
@@ -0,0 +1,174 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="Python读取PDF文字和表格,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="Python读取PDF文字和表格 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-oa-04/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/oa4.jpg">
|
||||
<meta property="og:description" content="Python读取PDF文字和表格--极简Python自动化办公系列">
|
||||
<meta name="description" content="Python读取PDF文字和表格--极简Python自动化办公系列">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>Python读取PDF文字和表格 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">Python读取PDF文字和表格</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-01-04</span> | <span>Category:</span><span><a href="/fly/自动化办公/" title="自动化办公">自动化办公</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<blockquote>
|
||||
<p>【极简Python 自动化办公】专栏是介绍如何利用python办公,减少工作负荷。篇幅精炼,内容易懂,无论是否有编程基础,都非常适合。</p>
|
||||
</blockquote>
|
||||
<p>在日常的工作中,处理PDF是最平常不过的事情了。今天带来极简Python自动化办公系列之使用Python提取Pdf文字和表格,希望能够在PDF处理上帮到你。</p>
|
||||
<p>这次我们准备了一个pdf测试文件,内容如下:</p>
|
||||
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8e0nlr7gdj30kc0zcjua.jpg" alt></p>
|
||||
<p>pdf中包括了2页,有文字,图片和表格,覆盖了大部分pdf的场景。</p>
|
||||
<h4 id="pdfplumber介绍"><a href="#pdfplumber介绍" class="headerlink" title="pdfplumber介绍"></a>pdfplumber介绍</h4><p>Pdfplumber是一个可以处理pdf格式信息的库。它可以查找关于每个文本字符、矩阵、和行的详细信息,也可以对表格进行提取并进行可视化调试。</p>
|
||||
<p>官方repo:<br> <code>https://github.com/jsvine/pdfplumber</code></p>
|
||||
<p>安装:<br><code>pip install pdfplumber</code></p>
|
||||
<h4 id="使用入门"><a href="#使用入门" class="headerlink" title="使用入门"></a>使用入门</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">import pdfplumber</span><br><span class="line"> </span><br><span class="line">with pdfplumber.open("test.pdf") as pdf:</span><br><span class="line"> first_page = pdf.pages[0] #取第一页</span><br><span class="line"> print(first_page.chars[0])#打印第一页第一个字文字信息</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>结果:</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">{'fontname': 'CRSMRF+PingFangTC-Semibold', 'adv': Decimal('1.000'), 'upright': 1, 'x0': Decimal('57.000'), 'y0': Decimal('751.840'), 'x1': Decimal('81.000'), 'y1': Decimal('779.776'), 'width': Decimal('24.000'), 'height': Decimal('27.936'), 'size': Decimal('27.936'), 'object_type': 'char', 'page_number': 1, 'text': '关', 'top': Decimal('62.224'), 'bottom': Decimal('90.160'), 'doctop': Decimal('62.224')}</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>格式化之后:</p>
|
||||
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8e0nm8qvij30kq0hi0um.jpg" alt></p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "fontname":"CRSMRF+PingFangTC-Semibold",</span><br><span class="line"> "adv":"1.000",</span><br><span class="line"> "upright":1,</span><br><span class="line"> "x0":"57.000",</span><br><span class="line"> "y0":"751.840",</span><br><span class="line"> "x1":"81.000",</span><br><span class="line"> "y1":"779.776",</span><br><span class="line"> "width":"24.000",</span><br><span class="line"> "height":"27.936",</span><br><span class="line"> "size":"27.936",</span><br><span class="line"> "object_type":"char",</span><br><span class="line"> "page_number":1, #页数</span><br><span class="line"> "text":"关", #第一个文字</span><br><span class="line"> "top":"62.224",</span><br><span class="line"> "bottom":"90.160",</span><br><span class="line"> "doctop":"62.224"</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<h4 id="常用方法"><a href="#常用方法" class="headerlink" title="常用方法"></a>常用方法</h4><ul>
|
||||
<li>extract_text() 用来提页面中的文本,将页面的所有字符对象整理为一个字符串</li>
|
||||
<li>extract_words() 返回的是所有的单词及其相关信息</li>
|
||||
<li>extract_tables() 提取页面的表格</li>
|
||||
</ul>
|
||||
<h4 id="提取文字"><a href="#提取文字" class="headerlink" title="提取文字"></a>提取文字</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">#!/usr/bin/env python3</span><br><span class="line"></span><br><span class="line">import pdfplumber</span><br><span class="line"></span><br><span class="line">with pdfplumber.open("test.pdf") as pdf:</span><br><span class="line"> first_page = pdf.pages[0]</span><br><span class="line"> text = first_page.extract_text() #提取第一页的所有文字</span><br><span class="line"> print(text)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8e0nmzq4wj30r007wgms.jpg" alt></p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">关于我们</span><br><span class="line">关于FlyPython</span><br><span class="line">FlyPython是提供⼀站式Python编程学习的组织,我们致⼒于为⽤户提供⾼</span><br><span class="line">效,有趣的学习环境,打造专注于Python的中⽂学习社区。</span><br><span class="line">联系我们</span><br><span class="line">客服&合作: 微信号 flypython</span><br><span class="line">微信公众号:</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<h4 id="提取表格"><a href="#提取表格" class="headerlink" title="提取表格"></a>提取表格</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">#!/usr/bin/env python3</span><br><span class="line"></span><br><span class="line">import pdfplumber</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">with pdfplumber.open("test.pdf") as pdf:</span><br><span class="line"> first_page = pdf.pages[0]</span><br><span class="line"> text = first_page.extract_text()</span><br><span class="line"> print(text)</span><br><span class="line"></span><br><span class="line"> second_page = pdf.pages[1] #第二页</span><br><span class="line"> table = second_page.extract_tables()#在第二页提取表格</span><br><span class="line"> for t in table:</span><br><span class="line"> df = pd.DataFrame(t[1:],columns=t[0])</span><br><span class="line"> print(df)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8e0no9hykj30po0f8wg9.jpg" alt></p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"> 分类 书名</span><br><span class="line">0 Python入门 Python编程:从入门到\n实践</span><br><span class="line">1 Python中级 流畅的Python</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<h4 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h4><p>pdfplumber的接口还是很容易的,如果只是需要提取文字,几行代码就可以提取到。如果是表格并没有提取出来或者错误的提取了非表格的内容,你需要在提取表格时加入<code>table_settings</code>参数来指定表格的设置。</p>
|
||||
<p>这次的demo中,图片并没有提取出来,pdf图片的提取会放到下一篇文章,敬请期待。</p>
|
||||
<p><em>人生苦短,我用python早下班。如果觉得不错,对你工作中有帮助,可以长按下列二维码关注我们的公众号。</em></p>
|
||||
<p> <img src="https://flypython.com/images/wechat.png" alt="flypython微信公众号"></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
159
article/python-oa-05/index.html
Normal file
159
article/python-oa-05/index.html
Normal file
@@ -0,0 +1,159 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="Python读取PDF图片,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="Python读取PDF图片 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-oa-05/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/oa4.jpg">
|
||||
<meta property="og:description" content="Python读取PDF图片--极简Python自动化办公系列">
|
||||
<meta name="description" content="Python读取PDF图片--极简Python自动化办公系列">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>Python读取PDF图片 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">Python读取PDF图片</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-01-05</span> | <span>Category:</span><span><a href="/fly/自动化办公/" title="自动化办公">自动化办公</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<blockquote>
|
||||
<p>【极简Python 自动化办公】专栏是介绍如何利用python办公,减少工作负荷。篇幅精炼,内容易懂,无论是否有编程基础,都非常适合。</p>
|
||||
</blockquote>
|
||||
<p>在上次的文章中,我们从PDF中提取了文字和表格,这次我们需要提取图片。</p>
|
||||
<p>还是先来看看我们上次的测试例子</p>
|
||||
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8e0nlr7gdj30kc0zcjua.jpg" alt></p>
|
||||
<p>这次我们要提取第一页的二维码图片。</p>
|
||||
<h4 id="fitz介绍"><a href="#fitz介绍" class="headerlink" title="fitz介绍"></a>fitz介绍</h4><p>pymupdf是mupdf的Python绑定,而今天我们要使用的fitz是pymupdf的子模块。需要的时候,使用pip安装。</p>
|
||||
<p><code>pip install pymupdf</code></p>
|
||||
<p>导入的时使用<code>import fitz</code>导入模块。</p>
|
||||
<p>更多信息可参考pymupdf的文档:<br><code>https://pymupdf.readthedocs.io/en/latest/intro/</code></p>
|
||||
<h4 id="提取图片"><a href="#提取图片" class="headerlink" title="提取图片"></a>提取图片</h4><p>提取图片的思路是通过正则表达式找到图片对象,然后保存为图片格式。</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line">#!/usr/bin/env python3</span><br><span class="line"></span><br><span class="line">import fitz #pip install pymupdf</span><br><span class="line">import re</span><br><span class="line">import os</span><br><span class="line"></span><br><span class="line">def find_imag(path,img_path):</span><br><span class="line"></span><br><span class="line"> checkXO = r"/Type(?= */XObject)"</span><br><span class="line"> checkIM = r"/Subtype(?= */Image)"</span><br><span class="line"></span><br><span class="line"> pdf = fitz.open(path)</span><br><span class="line"></span><br><span class="line"> img_count = 0</span><br><span class="line"> len_XREF = pdf._getXrefLength()</span><br><span class="line"></span><br><span class="line"> print("文件名:{}, 页数: {}, 对象: {}".format(path, len(pdf), len_XREF - 1))</span><br><span class="line"></span><br><span class="line"> for i in range(1, len_XREF):</span><br><span class="line"> text = pdf._getXrefString(i)</span><br><span class="line"> isXObject = re.search(checkXO, text)</span><br><span class="line"></span><br><span class="line"> # 使用正则表达式查看是否是图片</span><br><span class="line"> isImage = re.search(checkIM, text)</span><br><span class="line"></span><br><span class="line"> # 如果不是对象也不是图片,则continue</span><br><span class="line"> if not isXObject or not isImage:</span><br><span class="line"> continue</span><br><span class="line"> img_count += 1</span><br><span class="line"> # 根据索引生成图像</span><br><span class="line"> pix = fitz.Pixmap(pdf, i)</span><br><span class="line"> </span><br><span class="line"> new_name = path.replace('\\', '_') + "_img{}.png".format(img_count)</span><br><span class="line"> new_name = new_name.replace(':', '')</span><br><span class="line"></span><br><span class="line"> # 如果pix.n<5,可以直接存为PNG</span><br><span class="line"> if pix.n < 5:</span><br><span class="line"> pix.writePNG(os.path.join(img_path, new_name))</span><br><span class="line"> </span><br><span class="line"> else:</span><br><span class="line"> pix0 = fitz.Pixmap(fitz.csRGB, pix)</span><br><span class="line"> pix0.writePNG(os.path.join(img_path, new_name))</span><br><span class="line"> pix0 = None</span><br><span class="line"> </span><br><span class="line"> pix = None</span><br><span class="line"> </span><br><span class="line"> print("提取了{}张图片".format(img_count))</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">if __name__=='__main__':</span><br><span class="line"> pdf_path = r'test.pdf'</span><br><span class="line"> img_path = r'img'</span><br><span class="line"> m = find_imag(pdf_path, img_path)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>运行程序结果:</p>
|
||||
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[pdf] python3 pdf_img.py</span><br><span class="line">文件名:test.pdf, 页数: 2, 对象: 115</span><br><span class="line">提取了1张图片</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>在img目录中,已经存在了我们需要的文件</p>
|
||||
<p><img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8osipfp3uj30uu0jqgrw.jpg" alt></p>
|
||||
<h4 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h4><p>pymupdf的使用,今天就简单介绍到这里。更多的功能请参考pymupdf文档。</p>
|
||||
<p>下一篇,我们将带来pdf转换为图片的讨论。</p>
|
||||
<p><em>人生苦短,我用python早下班。如果觉得不错,对你工作中有帮助,可以长按下列二维码关注我们的公众号。</em></p>
|
||||
<p> <img src="https://tva1.sinaimg.cn/large/006y8mN6ly1g8pj2981c1j3076076mxn.jpg" alt="flypython微信公众号"></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
174
article/python-tutorial-01/index.html
Normal file
174
article/python-tutorial-01/index.html
Normal file
@@ -0,0 +1,174 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="你是如何自学Python的?,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="你是如何自学Python的? | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-tutorial-01/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/tutorial1.png">
|
||||
<meta property="og:description" content="你是如何自学Python的?--Python入门教程">
|
||||
<meta name="description" content="你是如何自学Python的?--Python入门教程">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>你是如何自学Python的? | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">你是如何自学Python的?</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-02-01</span> | <span>Category:</span><span><a href="/fly/Python入门/" title="Python入门">Python入门</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<h1 id="你是如何自学-Python-的?"><a href="#你是如何自学-Python-的?" class="headerlink" title="你是如何自学 Python 的?"></a>你是如何自学 Python 的?</h1><p><img src="http://jcjview.github.io/img/flypythonflypython001.jpg" alt></p>
|
||||
<p>why python?</p>
|
||||
<blockquote>
|
||||
<p>你可能听说过python</p>
|
||||
<p>Python入门相对容易又可以干很多事(网站,>运维,数据,爬虫等),是一门方便的工具语言。<br><strong>2019年8月TIOBE排名显示Python已经名列第3</strong>,仅次于java和c,并且还在快速增长中。</p>
|
||||
</blockquote>
|
||||
<h2 id="Python的使用场景"><a href="#Python的使用场景" class="headerlink" title="Python的使用场景"></a>Python的使用场景</h2><h3 id="01-数据分析"><a href="#01-数据分析" class="headerlink" title="01 数据分析"></a>01 数据分析</h3><p>对于数据分析和机器学习,Python是首选编程语言。python有众多数据分析工具,知名数据分析比赛网站kaggle,90%以上的竞赛代码都是用python写成。大数据平台如spark、flink,python有完整的支持api可调用。</p>
|
||||
<h3 id="02-网站开发"><a href="#02-网站开发" class="headerlink" title="02 网站开发"></a>02 网站开发</h3><p>对于网站开发,Python的生态环境也可以支撑起重量级的产品。<br>国外的Youtube,Instagram,Pinterest,Reddit,Dropbox,Disqus, Quora等知名应用一开始都是基于Python构建,国内的豆瓣,知乎,果壳,饿了么,等初期在也是Python应用的典型。</p>
|
||||
<h3 id="03-爬虫"><a href="#03-爬虫" class="headerlink" title="03 爬虫"></a>03 爬虫</h3><p>对于爬虫,则想不到比python更方便、更通用的的语言了。Python极其丰富的生态,诸如Request、Beautiful Soup、Scrapy、PySpider等第三方库,加上简洁易上手的语法,分分钟就能让你写出一个爬虫来。</p>
|
||||
<p>此外,还有机器学习、人工智能、科学计算、IT运维等领域,Python都是极其方便顺手的工具,更重要的是,永远开源,免费。</p>
|
||||
<h2 id="Python的就业前景"><a href="#Python的就业前景" class="headerlink" title="Python的就业前景"></a>Python的就业前景</h2><p>在it行业飞速发展的今天,在数据成为it命脉的时代,python的重要意义越来越不言自明。学习python,不仅仅是一门可以调用数据结构和算法的语言,在学会python的同时,可以同时学会爬取互联网海量资源,学会自动化分析互联网海量数据,学会制作展示宣传的网站,学会使用人工智能预测和改变世界。</p>
|
||||
<p>学习一门语言,得到多种技能,以及大数据的思维方式,何乐而不为呢。</p>
|
||||
<h3 id="Python有多火?"><a href="#Python有多火?" class="headerlink" title="Python有多火?"></a>Python有多火?</h3><p>Python有多火?大多数IT研发岗位,都需要Python程序员;甚至许多非研发岗位,纷纷在JD中给出精通Python技能者优先的字样。</p>
|
||||
<p><img src="http://jcjview.github.io/img/flypythonpython%20job.jpg" alt></p>
|
||||
<p><img src="http://jcjview.github.io/img/flypythonpython%20job2.jpg" alt></p>
|
||||
<h2 id="Python的学习曲线"><a href="#Python的学习曲线" class="headerlink" title="Python的学习曲线"></a>Python的学习曲线</h2><p>对于爱好者来说, python上手非常容易,学习曲线非常平滑。基本的例子,几行代码都能完成。</p>
|
||||
<p>python代码环境安装几乎是傻瓜式的,不像java要考虑众多库的配置和解决冲突。如果有编程的基础甚至只需要几小时就能上手,即使没有基础的小白,通过努力,7-10天,每天1小时,也可以快速掌握基本编程技巧。</p>
|
||||
<h2 id="Python的学习资料"><a href="#Python的学习资料" class="headerlink" title="Python的学习资料"></a>Python的学习资料</h2><p>Python官网<br>Python.org</p>
|
||||
<p>廖雪峰的Python教程<br><a href="https://www.liaoxuefeng.com/" target="_blank" rel="noopener">https://www.liaoxuefeng.com/</a></p>
|
||||
<p>简明python教程<br><a href="http://www.kuqin.com/abyteofpython_cn/" target="_blank" rel="noopener">http://www.kuqin.com/abyteofpython_cn/</a></p>
|
||||
<hr>
|
||||
<p>重点推荐书籍:《Python 基础教程》</p>
|
||||
<p><img src="http://jcjview.github.io/img/flypythonflpython001zhihu.jpg" alt></p>
|
||||
<p>知乎评价:<br><img src="http://jcjview.github.io/img/flypythonflpython001zhihu002.jpg" alt></p>
|
||||
<p>其他入门书籍:</p>
|
||||
<ul>
|
||||
<li>Head First Python</li>
|
||||
<li>Dive Into Python</li>
|
||||
<li>Python 核心编程</li>
|
||||
<li>深入理解 Python</li>
|
||||
<li>Python 标准库</li>
|
||||
<li>Python 编程指南</li>
|
||||
</ul>
|
||||
<p>(我们搜集了一些网上的电子书版本,关注公众号,回复”python”获取)</p>
|
||||
<p>当然,英文著作虽然经典,但涉及领域众多,概念多,信息量大,不适合速成。网上的资料丰富,但也鱼龙混杂。</p>
|
||||
<p>以 “Python入门” 为关键字搜索出的结果成千上万。不少小白选手难免会东一榔头西一棒槌,最终看了很多文章,却仍没跨过新手那道门槛。</p>
|
||||
<p>我们这里有一个python的入门课程,帮你把需要掌握的python基础知识都融汇贯通在小篇幅中。我们提供了很多有趣的实践项目,并且可以进群,互助学习,遇到困难有人来解答。</p>
|
||||
<p>加群请关注公众号,并回复“训练营”<br> <img src="https://flypython.com/images/wechat.png" alt="flypython微信公众号"></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
179
article/python-tutorial-02/index.html
Normal file
179
article/python-tutorial-02/index.html
Normal file
@@ -0,0 +1,179 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="潘石屹:我们为什么要学习Python语言?,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="潘石屹:我们为什么要学习Python语言? | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-tutorial-02/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/tutorial2.png">
|
||||
<meta property="og:description" content="潘石屹:我们为什么要学习Python语言?--Python入门教程">
|
||||
<meta name="description" content="潘石屹:我们为什么要学习Python语言?--Python入门教程">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>潘石屹:我们为什么要学习Python语言? | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">潘石屹:我们为什么要学习Python语言?</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-02-02</span> | <span>Category:</span><span><a href="/fly/Python入门/" title="Python入门">Python入门</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<blockquote>
|
||||
<p>11 月 15 日,SOHO 中国董事长潘石屹在微博上宣布,开始学习一门新的语言 Python,这也是今天给自己人生的礼物。</p>
|
||||
</blockquote>
|
||||
<p><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20191115152124.jpg" alt></p>
|
||||
<p>什么鬼?房地产大佬要学python?</p>
|
||||
<p><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img/pys.jpg" alt></p>
|
||||
<p>潘石屹,一位成功的房地产开发商老板,第一专业是石油方面的,63年出生,年龄都超过了55岁,这些描述怎么着都和编程沾不上边啊。然而,最近他非常高调地表示,要学习一款编程语言。<br>虽然我不同意他的有些观点,不过他的跨界,不给自己设限的态度是还是值得学习的。<br>大佬都忙着学编程,这让我们35岁左右的专业程序员们非常惭愧啊(难道非得财务自由以后才能学python么)。</p>
|
||||
<p><img src="http://jcjview.github.io/img/flypythonflypython001.jpg" alt></p>
|
||||
<p>潘石屹学python肯定不是为了转行找工作,肯定也不是为了爬取全网美女图片,他在微博里详细阐述了我们为什么要学习Python语言。</p>
|
||||
<p><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20191115152906.png" alt></p>
|
||||
<p>我们为什么要学习python——使用范围广<br>01.数据分析</p>
|
||||
<p>对于数据科学和机器学习,Python是首选编程语言。python有众多数据分析工具,知名数据分析比赛网站kaggle,90%以上的竞赛代码都是用python写成。大数据平台如hadoop、spark、flink、beam,python有完整的支持api可调用。</p>
|
||||
<p>02.网站开发</p>
|
||||
<p>对于网站开发,Python的生态环境也可以支撑起重量级的产品。国外的Youtube,Instagram,Pinterest,Reddit,Dropbox,Disqus, Quora等知名应用一开始都是基于Python构建,国内的豆瓣,知乎,果壳,饿了么,等初期在也是Python应用的典型。</p>
|
||||
<p>03.爬虫</p>
|
||||
<p>对于爬虫,则想不到比python更方便、更通用的的语言了。Python极其丰富的生态,诸如Request、Beautiful Soup、Scrapy、PySpider等第三方库,加上简洁易上手的语法,分分钟就能让你写出一个爬虫来。</p>
|
||||
<p>此外,还有机器学习、人工智能、科学计算、IT运维等领域,Python都是极其方便顺手的工具,更重要的是,永远开源,免费。</p>
|
||||
<p>Python的就业前景<br>在it行业飞速发展的今天,在数据成为it命脉的时代,python的重要意义越来越不言自明。学习python,不仅仅是一门可以调用数据结构和算法的语言,在学会python的同时,可以同时学会爬取互联网海量资源,学会自动化分析互联网海量数据,学会制作展示宣传的网站,学会使用人工智能预测和改变世界。学习一门语言,得到多种技能,以及大数据的思维方式,何乐而不为呢。</p>
|
||||
<p>Python有多火?大多数IT研发岗位,都需要Python程序员;甚至许多非研发岗位,纷纷在JD中给出精通Python技能者优先的字样。</p>
|
||||
<p>Python的学习曲线<br>对于爱好者来说, python上手非常容易,学习曲线非常平滑。基本的例子,几行代码都能完成。python代码环境安装几乎是傻瓜式的,不像java要考虑众多库的配置和解决冲突。如果有编程的基础甚至只需要几小时就能上手,即使没有基础的小白,通过努力,7-10天,每天1小时,也可以快速掌握基本编程技巧。</p>
|
||||
<p>Python的学习资料</p>
|
||||
<p>Python官网 </p>
|
||||
<p>Python.org</p>
|
||||
<p>廖雪峰的Python教程 </p>
|
||||
<p><a href="https://www.liaoxuefeng.com/" target="_blank" rel="noopener">https://www.liaoxuefeng.com/</a></p>
|
||||
<p>简明的python教程 </p>
|
||||
<p><a href="http://www.kuqin.com/abyteofpython_cn/" target="_blank" rel="noopener">http://www.kuqin.com/abyteofpython_cn/</a></p>
|
||||
<p>重点推荐书籍:</p>
|
||||
<p>《Python 基础教程》</p>
|
||||
<p>知乎评价:</p>
|
||||
<p>其他入门书籍:</p>
|
||||
<p>Head First Python</p>
|
||||
<p>Dive Into Python</p>
|
||||
<p>Python 核心编程</p>
|
||||
<p>深入理解 Python</p>
|
||||
<p>Python 标准库</p>
|
||||
<p>Python 编程指南</p>
|
||||
<p>(我们搜集了一些网上的电子书版本,关注公众号,回复”python”获取)</p>
|
||||
<p>当然,英文著作虽然经典,但涉及领域众多,概念多,信息量大,不适合速成。网上的资料丰富,但也鱼龙混杂。</p>
|
||||
<p>以 “Python入门” 为关键字搜索出的结果成千上万。不少小白选手难免会东一榔头西一棒槌,最终看了很多文章,却仍没跨过新手那道门槛。</p>
|
||||
<p>我们这里有一个python的入门课程,帮你把需要掌握的python基础知识都融汇贯通在小篇幅中。我们提供了很多有趣的实践项目,并且可以进群,互助学习,遇到困难有人来解答。</p>
|
||||
<p>加群请加个人微信号flypython。</p>
|
||||
<p>人生苦短,我用python早下班。如果觉得不错,对你工作中有帮助,动动手指分享给更多人哦。</p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
249
article/python-tutorial-03/index.html
Normal file
249
article/python-tutorial-03/index.html
Normal file
@@ -0,0 +1,249 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<head><meta name="generator" content="Hexo 3.9.0">
|
||||
<!-- Title -->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="applicable-device" content="pc,mobile">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, viewport-fit=cover">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<meta name="author" content="flypython">
|
||||
<meta name="designer" content="flypython">
|
||||
<meta name="keywords" content="Python正则15分钟入门,FlyPython - 专业的Python学习社区,flypython, 飞蟒,飞蟒Python,Python入门,Python自动化,Python日报">
|
||||
<meta property="og:title" content="Python正则15分钟入门 | FlyPython - 专业的Python学习社区">
|
||||
<meta property="og:site_name" content="http://www.flypython.com">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="http://www.flypython.com/article/python-tutorial-03/">
|
||||
<meta property="og:image" content="http://www.flypython.com/images/tutorial3.png">
|
||||
<meta property="og:description" content="Python正则15分钟入门--Python入门教程">
|
||||
<meta name="description" content="Python正则15分钟入门--Python入门教程">
|
||||
|
||||
<meta name="rating" content="general">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="icon" href="/images/favicon.ico">
|
||||
<title>Python正则15分钟入门 | FlyPython - 专业的Python学习社区</title>
|
||||
<link rel="stylesheet" href="/css/f25.css">
|
||||
<link rel="stylesheet" href="/css/highlight.css">
|
||||
|
||||
<link rel="stylesheet" href="/css/gitalk.css">
|
||||
|
||||
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-147288599-1"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-147288599-1');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<header class="wrapper header-wrapper">
|
||||
<div class="container header-nav-wrapper">
|
||||
<div class="logo"><a href="/" title="FlyPython - 专业的Python学习社区"><h1 class="title">FlyPython</h1></a></div>
|
||||
<nav class="nav-wrapper">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
<span class="btn-menu" id="J_header_menu">
|
||||
<div class="inner">
|
||||
<span class="line line-01"></span>
|
||||
<span class="line line-02"></span>
|
||||
<span class="line line-03"></span>
|
||||
</div>
|
||||
</span>
|
||||
<div class="wrapper mb-nav-wrapper" id="J_header_menu_list">
|
||||
<nav class="wrapper mb-nav-container">
|
||||
|
||||
<a href="https://flypython.com/python" title="飞蟒微课堂">飞蟒微课堂</a>
|
||||
|
||||
<a href="https://flypython.com/flypython_daily" title="Python日报">Python日报</a>
|
||||
|
||||
<a href="https://flypython.com/PyCon/" title="PyCon">PyCon</a>
|
||||
|
||||
<a href="https://github.com/flypythoncom" title="Github">Github</a>
|
||||
|
||||
<a href="/article/about" title="关于">关于</a>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<section class="body-wrapper">
|
||||
<section class="wrapper post-banner">
|
||||
<div class="container post-banner-container">
|
||||
<h2 class="wrapper title">Python正则15分钟入门</h2>
|
||||
<div class="wrapper tips">
|
||||
<span>Author:</span><span>flypython</span> | <span>Date: </span><span>2019-02-03</span> | <span>Category:</span><span><a href="/fly/Python入门/" title="Python入门">Python入门</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="wrapper main-wrapper">
|
||||
<article class="sub-container post-content">
|
||||
<p>flypython群里有同学问我,如何从大量格式不确定的word文档抽取姓名、电话号码、邮箱等信息存入excel表格。通过之前我们的文章,他已经学会读取和写入文档和表格,但就是无法处理格式不确定的文档。<strong>这里介绍的正则方法,可以帮助他解决这个问题。</strong></p>
|
||||
<h2 id="目标"><a href="#目标" class="headerlink" title="目标"></a>目标</h2><p>15分钟内让你真正明白正则表达式是什么,并且让你可以在自己的python程序里正确使用它。</p>
|
||||
<p>你将学会:</p>
|
||||
<ol>
|
||||
<li>极简python使用正则的方法</li>
|
||||
<li>如果利用python高效的匹配字符串</li>
|
||||
<li>如何利用python正则进行文本判断、过滤、信息提取</li>
|
||||
</ol>
|
||||
<h2 id="0-极简正则入门"><a href="#0-极简正则入门" class="headerlink" title="0.极简正则入门"></a>0.极简正则入门</h2><p>假设程序从word或者excel读取了一串字符串,字符串中有一部分是电话号码,现在需要完整提取这个电话号码。</p>
|
||||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line">reg=re.compile(<span class="string">"[0-9]+"</span>)</span><br><span class="line">a=reg.findall(<span class="string">"我的电话是3555487"</span>)</span><br><span class="line">print(a)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>输出:</p>
|
||||
<p><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img/20191016101032.png" alt></p>
|
||||
<p>解释:<br><code>"[0-9]+"</code>是正则表达式,意思是匹配0-9的数字,<code>"+"</code><br>表示可以匹配1次-多次,<code>reg.findall</code>表示从后面的字符串里找到所有的匹配值。</p>
|
||||
<h2 id="1-字符集"><a href="#1-字符集" class="headerlink" title="1.字符集"></a>1.字符集</h2><p>字符集,又叫元字符,就是用一些特殊符号表示特定种类的字符或位置。</p>
|
||||
<h4 id="匹配字符"><a href="#匹配字符" class="headerlink" title="匹配字符"></a>匹配字符</h4><table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="center">代码</th>
|
||||
<th>说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td align="center"><code>.</code></td>
|
||||
<td>匹配除换行符以外的任意一个字符</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>\d</code></td>
|
||||
<td>匹配数字</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>\w</code></td>
|
||||
<td>匹配字母或数字或下划线或汉字</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>\s</code></td>
|
||||
<td>匹配任意的空白符</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>^</code></td>
|
||||
<td>匹配字符串的开始</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>$</code></td>
|
||||
<td>匹配字符串的结束</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<p>举例</p>
|
||||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line">reg=re.compile(<span class="string">"我."</span>)</span><br><span class="line">a=reg.findall(<span class="string">"我的电话是3555487"</span>)</span><br><span class="line">print(a)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>输出:<br><img src="http://jcjview.github.io/img/re201910161010321.png" alt></p>
|
||||
<h4 id="重复匹配"><a href="#重复匹配" class="headerlink" title="重复匹配"></a>重复匹配</h4><table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="center">代码</th>
|
||||
<th>说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody><tr>
|
||||
<td align="center"><code>*</code></td>
|
||||
<td>重复0次-无数次</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>+</code></td>
|
||||
<td>重复1次-无数次</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>?</code></td>
|
||||
<td>重复0次-1次</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>{m}</code></td>
|
||||
<td>重复m次</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><code>{m,n}</code></td>
|
||||
<td>重复m-n次</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<p>举例</p>
|
||||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line">reg=re.compile(<span class="string">"5+"</span>)</span><br><span class="line">a=reg.findall(<span class="string">"我的电话是3555487"</span>)</span><br><span class="line">print(a)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>输出:<br><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img/re_20191016101824.png" alt></p>
|
||||
<h4 id="贪婪与懒惰"><a href="#贪婪与懒惰" class="headerlink" title="贪婪与懒惰"></a>贪婪与懒惰</h4><p>贪婪:匹配尽可能长的字符串<br>懒惰:匹配尽可能短的字符串<br>懒惰模式的启用只需在重复元字符之后加?既可。</p>
|
||||
<ul>
|
||||
<li><code>*?</code> 重复任意次,但尽可能少重复</li>
|
||||
<li><code>+?</code> 重复1次或更多次,但尽可能少重复</li>
|
||||
<li><code>??</code> 重复0次或1次,但尽可能少重复</li>
|
||||
<li><code>{n,m}?</code> 重复n到m次,但尽可能少重复</li>
|
||||
<li><code>{n,}?</code> 重复n次以上,但尽可能少重复</li>
|
||||
</ul>
|
||||
<p>举例</p>
|
||||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line">reg=re.compile(<span class="string">"5+?"</span>)</span><br><span class="line">a=reg.findall(<span class="string">"我的电话是3555487"</span>)</span><br><span class="line">print(a)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>输出<br><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img//re_20191016101824111.png" alt></p>
|
||||
<p>注意:<br>如果想匹配元字符本身或者正则中的一些特殊字符,使用<code>\\</code>转义。</p>
|
||||
<p>这里介绍的正则内容是最基础的,想要了解更详细的正则表达式语法,请参考:</p>
|
||||
<h2 id="2-利用正则判断"><a href="#2-利用正则判断" class="headerlink" title="2.利用正则判断"></a>2.利用正则判断</h2><h4 id="判断"><a href="#判断" class="headerlink" title="判断"></a>判断</h4><p>有时候我们想利用正则表达式对用户输入进行判断,比如判断用户输入的身份证号是否符合规则,那么可以这样写:</p>
|
||||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line">r=<span class="string">r'^([1-9]\d{5}[12]\d{3}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])\d{3}[0-9xX])$'</span></span><br><span class="line"></span><br><span class="line">s1 = <span class="string">'110102200101014779'</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#判断s1字符串是符合正则r</span></span><br><span class="line">an = re.search(r, s1)</span><br><span class="line"><span class="keyword">if</span> an:</span><br><span class="line"> <span class="keyword">print</span> (<span class="string">'yes'</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">print</span> (<span class="string">'no'</span>)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>输入结果<br><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img/re_20191016104208.png" alt></p>
|
||||
<p>说明:<code>^</code>字符表示必须匹配字符串开头;<code>$</code>表示必须匹配字符串结尾。</p>
|
||||
<h4 id="过滤"><a href="#过滤" class="headerlink" title="过滤"></a>过滤</h4><p>假设,输出一串文本,只想保留汉字,去除特殊符号。代码如下:</p>
|
||||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line">special_character_removal = re.compile(<span class="string">r'[,。、【 】“”:;()《》‘’{}?!⑦%>℃.^-——=&#@¥『』]'</span>, re.IGNORECASE)</span><br><span class="line">line=<span class="string">"贾蓉看了说:“高明的很。还要请教先生,这病与『性』命终久有妨无妨?”"</span></span><br><span class="line">l = special_character_removal.sub(<span class="string">''</span>, line)</span><br><span class="line">print(l)</span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>输入结果:<br><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img/re_20191016104753.png" alt></p>
|
||||
<h4 id="查找位置"><a href="#查找位置" class="headerlink" title="查找位置"></a>查找位置</h4><p>查找某个文本在字符串中的位置,一般用于信息提取。</p>
|
||||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line">p = re.compile(<span class="string">"\d+"</span>)</span><br><span class="line">content=<span class="string">"2019年9月9月9日"</span></span><br><span class="line">result2 = p.finditer(content)</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> m <span class="keyword">in</span> result2:</span><br><span class="line"> print(<span class="string">"str"</span>,m.group()) <span class="comment">##字符串</span></span><br><span class="line"> print(<span class="string">"start: "</span>,m.start(),<span class="string">" end: "</span>,m.end()) <span class="comment">##字符串位置</span></span><br></pre></td></tr></table></figure>
|
||||
|
||||
<p>输出结果</p>
|
||||
<p><img src="https://raw.githubusercontent.com/jcjview/jcjview.github.io/master/img/re_20191016110227.png" alt></p>
|
||||
<p><em>人生苦短,我用python早下班。如果觉得不错,对你工作中有帮助,请长按下面二维码关注我们。(回复训练营加群,一起探讨python问题)</em></p>
|
||||
<p> <img src="https://flypython.com/images/wechat.png" alt="flypython微信公众号"></p>
|
||||
|
||||
</article>
|
||||
<div class="sub-container gitalk-wrapper" id="gitalk-container"></div>
|
||||
</section>
|
||||
|
||||
<div class="tips-top-wrapper">
|
||||
<span class="tip-top-container" onclick="scrollToWindowTop()">
|
||||
<span class="l-bar"></span>
|
||||
<span class="r-bar"></span>
|
||||
</span>
|
||||
</div>
|
||||
<footer class="wrapper footer-wrapper">
|
||||
<div class="container"><span class="copyright">© 2020 FlyPython . All Rights Reserved.</span></div>
|
||||
</footer>
|
||||
</section>
|
||||
<script src="/js/f25.js"></script>
|
||||
|
||||
<script src="/js/gitalk.min.js"></script>
|
||||
|
||||
<script>
|
||||
var gitalkAdmin = 'xxg1413'.split(',');
|
||||
var gitalk = new Gitalk({
|
||||
clientID: 'd0e566bfc45c0b852c6c',
|
||||
clientSecret: '6b69b3a841c85a6223e5a904c47f5e2d84322980',
|
||||
repo: 'gitalk',
|
||||
owner: 'flypythoncom',
|
||||
admin: gitalkAdmin,
|
||||
id: location.pathname.length > 50 ? location.pathname.substr(0,50) : location.pathname, // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
});
|
||||
gitalk.render('gitalk-container');
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user