<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Python Papers]]></title><description><![CDATA[Learning and Developing in Python]]></description><link>https://www.pythonpapers.com</link><image><url>https://substackcdn.com/image/fetch/$s_!hYhe!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e3c79a3-b014-495b-8ecb-094e0086d5f6_1280x1280.png</url><title>The Python Papers</title><link>https://www.pythonpapers.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 11 Sep 2026 09:28:38 GMT</lastBuildDate><atom:link href="https://www.pythonpapers.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Mike Driscoll]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[pypapers@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[pypapers@substack.com]]></itunes:email><itunes:name><![CDATA[Mike Driscoll]]></itunes:name></itunes:owner><itunes:author><![CDATA[Mike Driscoll]]></itunes:author><googleplay:owner><![CDATA[pypapers@substack.com]]></googleplay:owner><googleplay:email><![CDATA[pypapers@substack.com]]></googleplay:email><googleplay:author><![CDATA[Mike Driscoll]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Plotext 6 Released!]]></title><description><![CDATA[Plotext released version 6.0.0 recently.]]></description><link>https://www.pythonpapers.com/p/plotext-6-released</link><guid isPermaLink="false">https://www.pythonpapers.com/p/plotext-6-released</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Thu, 10 Sep 2026 18:04:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nd_u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://github.com/piccolomo/plotext/releases/tag/6.0.0">Plotext</a> released version 6.0.0 recently. Plotext is a Python package for creating plots in your terminal. With version 6.0.0, plotext has had a complete rewrite.</p><p>The biggest change is that plotest drawing is now done in a C++ kernel. The other big change is that <code>plotext.figure</code> is now the plot. Version 5 offered the same kind of thing, but in separate functions.</p><h2>Getting plotext</h2><p>To upgrade to the newest version of plotext, you can use pip, like this:</p><p><strong>pip install plotext --upgrade</strong></p><p>If you do not already have plotext, then this command will install the latest. Otherwise, pip will upgrade your installation to the latest.</p><h2>Specific Changes in 6.0.0</h2><p>Here&#8217;s a copy of the main changes from the release page:</p><ul><li><p><strong>C++ kernel</strong>: the drawing is done by a new <a href="https://github.com/piccolomo/plotext/tree/master/plotext/_kernel/cpp">kernel</a> written in C++, compiled during the installation.</p></li><li><p><strong>The figure</strong>: <code>plotext.figure</code> is the plot, holding the tools necessary to build it, from the drawings to the way it looks and rendered; version 5 offered the same as separate functions of the package. When a grid of <a href="https://plotext.readthedocs.io/en/latest/subplot.html">subplots</a> is present,<br><code>plotext.subplot()</code> gives the subplot figure, holding the same tools.</p></li><li><p><strong>Colored primitives</strong>: the <a href="https://plotext.readthedocs.io/en/latest/pixel.html">pixel</a>, holding a color pair and a style, the <a href="https://plotext.readthedocs.io/en/latest/colorize.html">colorize</a> string, and the <a href="https://plotext.readthedocs.io/en/latest/matrix.html">matrix</a> of colored characters a plot is<br>made of.</p></li><li><p><strong>The marker</strong>: a new object, <code>plotext.marker</code>, holding the symbol drawn at each point together with its coloring, in place of the <code>marker</code> parameter of version 5: it accepts a <a href="https://plotext.readthedocs.io/en/latest/marker.html">symbol</a> name, a text of several characters, a<br><a href="https://plotext.readthedocs.io/en/latest/colorize.html">colorize</a> string or a whole <a href="https://plotext.readthedocs.io/en/latest/matrix.html">matrix</a>.</p></li><li><p><strong>The signal</strong>: a sequence of points together with the settings describing how it is drawn. Every plotting method returns a signal object, which reaches the plot only when passed to <code>plotext.figure.draw()</code>. See the <a href="https://plotext.readthedocs.io/en/latest/signal.html">signal</a> page.</p></li><li><p><strong>The ruler</strong>: the object controlling the area of the plot where the numerical ticks appear. See the <a href="https://plotext.readthedocs.io/en/latest/ruler.html">ruler</a> page.</p></li><li><p><strong>Command line tool</strong>: <a href="https://plotext.readthedocs.io/en/latest/cli.html">rewritten</a>, the version 5 subcommands replaced by a chain of methods mirroring the Python ones.</p></li><li><p><strong>Documentation</strong>: the readme files are replaced by a complete separate <a href="https://plotext.readthedocs.io/en/latest/">guide</a>.</p></li><li><p><strong>Pretty docstrings</strong>: the <a href="https://plotext.readthedocs.io/en/latest/prettydoc.html">prettydoc</a> module writes colorful docstrings, browsable one by one, as <code>plotext.doc.bar()</code>, or through the interactive menu <code>plotext.doc()</code>, inside the terminal.</p></li></ul><h2>Quick Example</h2><p>If you would like to see how to use plotext, you can write the following basic bar plot code into your favorite Python IDE:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nd_u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nd_u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png 424w, https://substackcdn.com/image/fetch/$s_!nd_u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png 848w, https://substackcdn.com/image/fetch/$s_!nd_u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png 1272w, https://substackcdn.com/image/fetch/$s_!nd_u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nd_u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png" width="1456" height="766" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:766,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:121994,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.pythonpapers.com/i/215086375?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nd_u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png 424w, https://substackcdn.com/image/fetch/$s_!nd_u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png 848w, https://substackcdn.com/image/fetch/$s_!nd_u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png 1272w, https://substackcdn.com/image/fetch/$s_!nd_u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174bbdc2-5354-43fc-a009-d7fad791a5e8_1704x896.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you type this code out correctly and then run it in your terminal, you should see something like the following:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4USB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4USB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp 424w, https://substackcdn.com/image/fetch/$s_!4USB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp 848w, https://substackcdn.com/image/fetch/$s_!4USB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp 1272w, https://substackcdn.com/image/fetch/$s_!4USB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4USB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp" width="960" height="528" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:528,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4604,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.pythonpapers.com/i/215086375?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4USB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp 424w, https://substackcdn.com/image/fetch/$s_!4USB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp 848w, https://substackcdn.com/image/fetch/$s_!4USB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp 1272w, https://substackcdn.com/image/fetch/$s_!4USB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc570116-0f2b-46af-b6ce-d58fc2545e01_960x528.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you would like to learn more, check out the <a href="https://plotext.readthedocs.io/en/latest/index.html">plotext documentation</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.pythonpapers.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Python Papers is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Are Python Tech Books Useful Anymore?]]></title><description><![CDATA[The question in this article's title has been on my mind a lot this year.]]></description><link>https://www.pythonpapers.com/p/are-python-tech-books-useful-anymore</link><guid isPermaLink="false">https://www.pythonpapers.com/p/are-python-tech-books-useful-anymore</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 02 Sep 2026 17:53:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hYhe!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e3c79a3-b014-495b-8ecb-094e0086d5f6_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The question in this article's title has been on my mind a lot this year. Do you find Python tech books useful right now? Let me know! If so, would you pay for them?</p><p>The reason this question has been in my mind is that I have run three Kickstarters for three different books in the last year. The first one was for my <a href="https://driscollis.gumroad.com/l/vibegames">Vibe Coding Videogames</a> book, which failed.</p><p>I decided to go ahead and write that book anyway because I wanted more experience with vibe-coding and working with agents. The book&#8217;s sales have been abysmal which lines up with the failure of the Kickstarter. But I learned a lot and it was fun to do.</p><p>Next, I did a Kickstarter for <a href="https://driscollis.gumroad.com/l/pytyping">Python Typing</a>, a book all about type hinting in Python and type checkers. That Kickstarter barely got funded, so I wrote that one too. That book had actually been in my head for several years, so it was pretty easy to write. I also learned a lot about type hinting and the new Python type checkers!</p><p>However, besides the Kickstarter funds, that book&#8217;s sales have been pretty bad as well. I knew it was a niche topic going in, but with type hinting being so prevalent now, I thought it would do a bit better.</p><p>Lastly, I tried doing a Kickstarter for Python 101, 3rd Edition. This has been my most popular book, by far. However, that Kickstarter failed utterly. It raised even less than Python Typing!</p><p>I have noticed my Python blog has been shedding readers as well, and while this newsletter has stayed pretty steady at around 8500 subscribers, it&#8217;s been stuck at that subscriber amount for at least a year or more. I would have expected it to keep growing, even if it was slowly, but that hasn&#8217;t been the case.</p><p>I know other authors have noticed this trend as well. So with that in mind, what do you think? Do you find Python tech books useful now that you can simply ask AI to figure it all out for you? Are there still any topics where you find AI inadequate and wish there were better documentation?</p><p>Let me know! I still enjoy writing, but I&#8217;ve been getting so little feedback of late that it&#8217;s hard to know if I am really reaching anyone besides bots these days.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.pythonpapers.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Python Papers is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Creating a Line Chart with Matplotlib and Python]]></title><description><![CDATA[Creating plots, charts, and graphs is the very purpose of a plotting package, such as Matplotlib.]]></description><link>https://www.pythonpapers.com/p/creating-a-line-chart-with-matplotlib</link><guid isPermaLink="false">https://www.pythonpapers.com/p/creating-a-line-chart-with-matplotlib</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 26 Aug 2026 16:27:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z1Vb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc90fd5bd-952b-4049-8284-cb2e54c84620_1616x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Creating plots, charts, and graphs is the very purpose of a plotting package, such as Matplotlib. You can plot all the standard charts you can think of with Matplotlib and Python. These charts can help you show how data changes over time. For example, you might want to plot the temperatures of your home city over several months or years.</p><p>By plotting thes&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/creating-a-line-chart-with-matplotlib">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Timing Your Python Code with Built-in Libraries]]></title><description><![CDATA[Sometimes you want to know why your code is slow.]]></description><link>https://www.pythonpapers.com/p/timing-your-python-code-with-built</link><guid isPermaLink="false">https://www.pythonpapers.com/p/timing-your-python-code-with-built</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Mon, 17 Aug 2026 13:52:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qA9l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F388ed089-dda5-4cd6-879f-d1cf62ac72cb_1498x554.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Sometimes you want to know why your code is slow. The process of determining the slowness is called profiling. In this article, you will look at using some of Python&#8217;s internal libraries to help you track down your slow code.</p><h3>Using timeit</h3><p>Python comes with a module called <strong>timeit</strong>. You can use it to time small code snippets. The <strong>timeit</strong> module uses platform-&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/timing-your-python-code-with-built">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Python 101 - Creating a Logging Decorator]]></title><description><![CDATA[Logging boilerplate can make adding logging to your code more complex.]]></description><link>https://www.pythonpapers.com/p/python-101-creating-a-logging-decorator</link><guid isPermaLink="false">https://www.pythonpapers.com/p/python-101-creating-a-logging-decorator</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Tue, 11 Aug 2026 17:35:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jHnC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F761f66f8-d066-43ae-861b-1fdc932d1e7f_1498x1108.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Logging boilerplate can make adding logging to your code more complex. One workaround is to wrap up your logging code in a decorator. Then, you can add a decorator to any functions that you want to add logging to.</p><p>This chapter will cover the following topics:</p><ul><li><p>What is a decorator?</p></li><li><p>Creating an exception logging decorator</p></li><li><p>Passing a logger to a decorator</p></li></ul><p>You wil&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/python-101-creating-a-logging-decorator">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Logging from Multiple Modules with Python]]></title><description><![CDATA[As a beginner, you usually write your application code in a single file.]]></description><link>https://www.pythonpapers.com/p/logging-from-multiple-modules-with</link><guid isPermaLink="false">https://www.pythonpapers.com/p/logging-from-multiple-modules-with</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 05 Aug 2026 14:02:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!w9Cg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8edeb654-62df-467e-b14a-8f3e974ff927_1250x1492.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As a beginner, you usually write your application code in a single file. But soon, you&#8217;ll find that you have hundreds or thousands of lines of code in a file, which can become hard to manage.</p><p>Then, you break up your code into multiple files. In Python, each Python file is considered a module. A group of related modules is called a package.</p><p>Why does that m&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/logging-from-multiple-modules-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Adjusting Image Sharpness with Python and Pillow]]></title><description><![CDATA[Photographers try to take photos that are in focus, or sharp.]]></description><link>https://www.pythonpapers.com/p/adjusting-image-sharpness-with-python</link><guid isPermaLink="false">https://www.pythonpapers.com/p/adjusting-image-sharpness-with-python</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 29 Jul 2026 18:12:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pFy_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb41c87fe-d3ce-4f6c-a65f-8cf4703c5f5c_872x732.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Photographers try to take photos that are in focus, or sharp. When they fail to do so, the images are blurry. You can sometimes make a blurry image look better by using a sharpening technique. You can also sharpen an image that is already in focus to make it look even better. You should try both methods on your photos as one may work better depending on&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/adjusting-image-sharpness-with-python">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Python 101 3rd Edition Kickstarter Launch]]></title><description><![CDATA[For years, Python 101 has helped readers take their first steps into programming.]]></description><link>https://www.pythonpapers.com/p/python-101-3rd-edition-kickstarter</link><guid isPermaLink="false">https://www.pythonpapers.com/p/python-101-3rd-edition-kickstarter</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 22 Jul 2026 20:05:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HswJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For years, <em>Python 101</em> has helped readers take their first steps into programming. Whether you&#8217;re a complete beginner, a student, or someone looking to learn Python for work or personal projects, the goal has always been the same: make learning Python approachable, practical, and enjoyable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HswJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HswJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png 424w, https://substackcdn.com/image/fetch/$s_!HswJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png 848w, https://substackcdn.com/image/fetch/$s_!HswJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png 1272w, https://substackcdn.com/image/fetch/$s_!HswJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HswJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png" width="715" height="398" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:398,&quot;width&quot;:715,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:305026,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.pythonpapers.com/i/208111149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HswJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png 424w, https://substackcdn.com/image/fetch/$s_!HswJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png 848w, https://substackcdn.com/image/fetch/$s_!HswJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png 1272w, https://substackcdn.com/image/fetch/$s_!HswJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77f1fb50-d0c0-4b8e-b920-dfdb8ff5dfdf_715x398.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Python has continued to evolve, and it&#8217;s time for the book to evo&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/python-101-3rd-edition-kickstarter">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Adjusting Image Brightness with Python and Pillow]]></title><description><![CDATA[If you have been following this newsletter, you will recall learning about changing an image's contrast and adjusting its color balance with Python.]]></description><link>https://www.pythonpapers.com/p/adjusting-image-brightness-with-python</link><guid isPermaLink="false">https://www.pythonpapers.com/p/adjusting-image-brightness-with-python</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Tue, 21 Jul 2026 13:11:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NbxY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c3af32-92d1-488c-b552-2e33c1268ac9_490x726.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you have been following this newsletter, <span>you will recall learning about&nbsp;</span><a href="https://www.pythonpapers.com/p/changing-image-contrast-with-python"><span>changing an image's contrast&nbsp;</span></a><span>and&nbsp;</span><a href="https://www.pythonpapers.com/p/adjusting-image-color-balance-with"><span>adjusting its color balance&nbsp;</span></a>with Python. Today you will tackle the subject of image brightness!</p><p>Image brightness is a way to measure the intensity or luminosity of an image after it has been captured. Pillow&#8217;s <code>ImageEnhance</code> module allows you to modi&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/adjusting-image-brightness-with-python">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[An Intro to Spiel – Creating Presentations in Your Terminal with Python]]></title><description><![CDATA[Have you ever wanted to create a presentation in your computer&#8217;s terminal?]]></description><link>https://www.pythonpapers.com/p/an-intro-to-spiel-creating-presentations</link><guid isPermaLink="false">https://www.pythonpapers.com/p/an-intro-to-spiel-creating-presentations</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Tue, 14 Jul 2026 19:22:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eeOS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d99c096-304e-44bb-a871-02f379a7a761_1284x938.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Have you ever wanted to create a presentation in your computer&#8217;s terminal? While this is an uncommon need, a clever open source developer has provided a solution to this problem! The project is called <a href="https://github.com/JoshKarpel/spiel">Spiel</a>, and while it is currently archived, the idea is pretty cool. Spiel uses the <a href="https://github.com/Textualize/rich">Rich</a> package to create the slides for your presentation. Note: while th&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/an-intro-to-spiel-creating-presentations">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[New Book Release: Python Typing]]></title><description><![CDATA[I am happy to announce that my latest book, Python Typing, is now available on all platforms.]]></description><link>https://www.pythonpapers.com/p/new-book-release-python-typing</link><guid isPermaLink="false">https://www.pythonpapers.com/p/new-book-release-python-typing</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Thu, 09 Jul 2026 14:48:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!P983!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc323a123-f51e-4b67-8a91-f4875d91619f_683x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I am happy to announce that my latest book, <strong>Python Typing</strong>, is now available on all platforms. You can get your copy on <a href="https://driscollis.gumroad.com/l/pytyping">Gumroad</a> or <a href="https://leanpub.com/pythontyping">Leanpub</a> or <a href="https://www.amazon.com/dp/B0H5L5V9YZ">Amazon</a></p><p>Python has had type hinting support since Python 3.5, over TEN years ago! However, Python&#8217;s type annotations have changed repeatedly over the years. In <strong>Python Typing: Type Checking for Python Programmers</strong>, you&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/new-book-release-python-typing">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Changing Image Contrast with Python and Pillow]]></title><description><![CDATA[In the last article, you learned how to adjust an image&#8217;s color balance.]]></description><link>https://www.pythonpapers.com/p/changing-image-contrast-with-python</link><guid isPermaLink="false">https://www.pythonpapers.com/p/changing-image-contrast-with-python</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Tue, 07 Jul 2026 16:19:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y4IQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb4320a7-9c2a-4d77-ab2d-ed0b0fd11651_842x566.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the last <a href="https://www.pythonpapers.com/p/adjusting-image-color-balance-with">article</a>, you learned how to adjust an image&#8217;s color balance. Today you will learn how to change the contrast in an image.</p><p>Contrast is defined as the difference between dark and light in an image. A high-contrast image will have bright highlights and nice, dark shadows. Colors are usually bold and display texture. A low-contrast image, on the &#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/changing-image-contrast-with-python">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Python eBook and Course Summer Sale]]></title><description><![CDATA[It&#8217;s officially summer, and I am bringing you some HOT Python deals today!]]></description><link>https://www.pythonpapers.com/p/python-ebook-and-course-summer-sale</link><guid isPermaLink="false">https://www.pythonpapers.com/p/python-ebook-and-course-summer-sale</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 01 Jul 2026 17:44:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xdqR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1596fb8-ef95-4e05-911e-02989b8bb521_1024x588.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It&#8217;s officially summer, and I am bringing you some HOT Python deals today! Get 33% off almost all my books and courses on Gumroad today using the following <strong>H5N5F7K</strong></p><p>You can start learning the basics of Python with Python 101, or get more targeted learning with my book, Python Logging. If you want to create a user interface, then you might enjoy Creating T&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/python-ebook-and-course-summer-sale">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Adjusting Image Color Balance with Python]]></title><description><![CDATA[Pillow includes the ImageEnhance A module that contains some classes you can use to enhance your images.]]></description><link>https://www.pythonpapers.com/p/adjusting-image-color-balance-with</link><guid isPermaLink="false">https://www.pythonpapers.com/p/adjusting-image-color-balance-with</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 24 Jun 2026 14:09:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ViN1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7ff77ee-3aee-475f-977f-efa4847dce24_480x648.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Pillow includes the <code>ImageEnhance</code> A module that contains some classes you can use to enhance your images. All of the included classes implement a common interface via the <code>enhance()</code> method. This makes learning how to use <code>ImageEnhance</code> easier.</p><p>You can read more about these classes in the <a href="https://pillow.readthedocs.io/en/3.0.x/reference/ImageEnhance.html">documentation</a>.</p><p>In this article, you will focus only on adjusting an imag&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/adjusting-image-color-balance-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Python Logging - Working with Filters]]></title><description><![CDATA[Python&#8217;s logging module provides support for filters.]]></description><link>https://www.pythonpapers.com/p/python-logging-working-with-filters</link><guid isPermaLink="false">https://www.pythonpapers.com/p/python-logging-working-with-filters</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 17 Jun 2026 20:34:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LGea!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11fc166-cdae-46d1-8af6-ffec5136bda9_1474x726.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Python&#8217;s <code>logging</code> module provides support for filters. You can add a Filter to a <code>Handler</code> or a <code>Logger</code> object for more sophisticated filtering than you can get through log levels.</p><p>Python&#8217;s <a href="https://docs.python.org/3/library/logging.html#filter-objects">documentation</a> gives the following example of how you might use a logging filter:</p><blockquote><p>A filter initialized with &#8216;A.B&#8217; will allow events logged by loggers &#8216;A.B&#8217;, &#8216;A.B.C&#8217;, &#8216;A.B.C&#8230;</p></blockquote>
      <p>
          <a href="https://www.pythonpapers.com/p/python-logging-working-with-filters">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Get TIFF Tag Data with Python]]></title><description><![CDATA[Last week, you learned how to get EXIF metadata from your JPEG files.]]></description><link>https://www.pythonpapers.com/p/how-to-get-tiff-tag-data-with-python</link><guid isPermaLink="false">https://www.pythonpapers.com/p/how-to-get-tiff-tag-data-with-python</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Tue, 09 Jun 2026 20:33:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!u4fk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.pythonpapers.com/p/how-to-get-image-exif-data-with-python">Last week</a>, you learned how to get EXIF metadata from your JPEG files. This week, you will learn how to get similar data from the TIFF image format.</p><p>Pillow provides a similar dictionary for TIFF images in its <code>TiffTags</code> module. If you need a TIFF image, you can use this one, which is a cover from one of the author's other books on <strong>ReportLab</strong>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u4fk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u4fk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png 424w, https://substackcdn.com/image/fetch/$s_!u4fk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png 848w, https://substackcdn.com/image/fetch/$s_!u4fk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png 1272w, https://substackcdn.com/image/fetch/$s_!u4fk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u4fk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png" width="546" height="762" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:762,&quot;width&quot;:546,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:649831,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.pythonpapers.com/i/201360169?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u4fk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png 424w, https://substackcdn.com/image/fetch/$s_!u4fk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png 848w, https://substackcdn.com/image/fetch/$s_!u4fk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png 1272w, https://substackcdn.com/image/fetch/$s_!u4fk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c0f6af8-f914-4e94-ae2a-5c5f933af008_546x762.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can create y&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/how-to-get-tiff-tag-data-with-python">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Get Image EXIF Data with Python]]></title><description><![CDATA[Digital photographs of the JPG filetype include a type of metadata that is known as Exchangeable Image File Format or simply Exif. You can access these tags using the PIL.ExifTags module.]]></description><link>https://www.pythonpapers.com/p/how-to-get-image-exif-data-with-python</link><guid isPermaLink="false">https://www.pythonpapers.com/p/how-to-get-image-exif-data-with-python</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 03 Jun 2026 13:40:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3pvb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6cdc1989-7395-4a01-b925-4cd8b3721043_1238x826.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Digital photographs of the JPG filetype include a type of metadata that is known as <strong>Exchangeable Image File Format</strong> or simply <strong>Exif</strong>. You can access these tags using the <code>PIL.ExifTags</code> module.</p><p>You can learn more about this module by checking out its <a href="https://pillow.readthedocs.io/en/stable/reference/ExifTags.html">documentation</a>.</p><p>In this article, you will focus on getting this image metadata using Pillow.</p><h2><strong>Getting Exif Tag Data</strong></h2><p>&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/how-to-get-image-exif-data-with-python">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Resize a Photo with Python]]></title><description><![CDATA[Sometimes you will find yourself wanting to resize a photo.]]></description><link>https://www.pythonpapers.com/p/how-to-resize-a-photo-with-python</link><guid isPermaLink="false">https://www.pythonpapers.com/p/how-to-resize-a-photo-with-python</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Wed, 27 May 2026 14:13:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!a4qO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd212f404-b7da-4897-9eeb-41e268c23bd0_1534x1236.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Sometimes you will find yourself wanting to resize a photo. I usually do this for photos I plan to email or post on a website, since some of my images can be quite large. Normal people use an image editor. I usually do as well, but for fun, I thought I would look into how to do it in Python.</p><p>The quickest way to do this is to use the Pillow package, which&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/how-to-resize-a-photo-with-python">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Python 101 - How to Scrape a Website]]></title><description><![CDATA[The Internet is the host of much of the world&#8217;s information, both past and present.]]></description><link>https://www.pythonpapers.com/p/python-101-how-to-scrape-a-website</link><guid isPermaLink="false">https://www.pythonpapers.com/p/python-101-how-to-scrape-a-website</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Tue, 19 May 2026 15:48:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VM3C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912664d7-520c-406e-9ad2-9d837e818fca_2242x1492.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The Internet is the host of much of the world&#8217;s information, both past and present. You can find history, news, comics, and much more on the Internet. As a software developer, you might want to gain access to the troves of data that exist on the Internet. Some web pages provide a free or paid <strong>Application Programming Interface (API)</strong> that you can use to p&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/python-101-how-to-scrape-a-website">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Convert a Photo to Black and White in Python]]></title><description><![CDATA[Black-and-white images aren&#8217;t for everyone.]]></description><link>https://www.pythonpapers.com/p/convert-a-photo-to-black-and-white</link><guid isPermaLink="false">https://www.pythonpapers.com/p/convert-a-photo-to-black-and-white</guid><dc:creator><![CDATA[Mike Driscoll]]></dc:creator><pubDate>Tue, 12 May 2026 17:42:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vw_J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fdb79e-e26e-4665-8b5a-d80742a329d9_1196x810.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Black-and-white images aren&#8217;t for everyone. I personally like to play around with them, as you can sometimes take a boring photo and turn it into something dramatic. I have also rescued a drab photo by turning it black and white. If you want to convert a photo you took to black and white programmatically, the Pillow package has you covered. In this arti&#8230;</p>
      <p>
          <a href="https://www.pythonpapers.com/p/convert-a-photo-to-black-and-white">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>