From cab456867b4a00e488804d8771a45769b9b75951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jure=20=C5=A0orn?= <sornjure@gmail.com> Date: Sat, 15 May 2021 15:03:59 +0200 Subject: [PATCH] OS commands, SQLite, Bytes --- README.md | 17 ++++++++++------- index.html | 21 ++++++++++++--------- parse.js | 2 +- pdf/index_for_pdf.html | 6 +++--- web/script_2.js | 4 ++-- 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 12c4031..1953f29 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Contents ** ** **3. Syntax:** ** ** **[`Args`](#arguments)**__,__ **[`Inline`](#inline)**__,__ **[`Closure`](#closure)**__,__ **[`Decorator`](#decorator)**__,__ **[`Class`](#class)**__,__ **[`Duck_Type`](#duck-types)**__,__ **[`Enum`](#enum)**__,__ **[`Exception`](#exceptions)**__.__ ** ** **4. System:** ** ** **[`Exit`](#exit)**__,__ **[`Print`](#print)**__,__ **[`Input`](#input)**__,__ **[`Command_Line_Arguments`](#command-line-arguments)**__,__ **[`Open`](#open)**__,__ **[`Path`](#paths)**__,__ **[`OS_Commands`](#os-commands)**__.__ ** ** **5. Data:** ** ** **[`JSON`](#json)**__,__ **[`Pickle`](#pickle)**__,__ **[`CSV`](#csv)**__,__ **[`SQLite`](#sqlite)**__,__ **[`Bytes`](#bytes)**__,__ **[`Struct`](#struct)**__,__ **[`Array`](#array)**__,__ **[`Memory_View`](#memory-view)**__,__ **[`Deque`](#deque)**__.__ -** ** **6. Advanced:** ** ** **[`Threading`](#threading)**__,__ **[`Operator`](#operator)**__,__ **[`Introspection`](#introspection)**__,__ **[`Metaprograming`](#metaprograming)**__,__ **[`Eval`](#eval)**__,__ **[`Coroutines`](#coroutines)**__.__ +** ** **6. Advanced:** ** ** **[`Threading`](#threading)**__,__ **[`Operator`](#operator)**__,__ **[`Introspection`](#introspection)**__,__ **[`Metaprograming`](#metaprogramming)**__,__ **[`Eval`](#eval)**__,__ **[`Coroutines`](#coroutines)**__.__ ** ** **7. Libraries:** ** ** **[`Progress_Bar`](#progress-bar)**__,__ **[`Plot`](#plot)**__,__ **[`Table`](#table)**__,__ **[`Curses`](#curses)**__,__ **[`Logging`](#logging)**__,__ **[`Scraping`](#scraping)**__,__ **[`Web`](#web)**__,__ **[`Profile`](#profiling)**__,__ ** ** **[`NumPy`](#numpy)**__,__ **[`Image`](#image)**__,__ **[`Audio`](#audio)**__,__ **[`Games`](#pygame)**__,__ **[`Data`](#pandas)**__.__ @@ -1670,6 +1670,7 @@ import os, shutil ```python os.chdir(<path>) # Changes the current working directory. os.mkdir(<path>, mode=0o777) # Creates a directory. Mode is in octal. +os.makedirs(<path>, mode=0o777) # Creates all directories in the path. ``` ```python @@ -1850,13 +1851,14 @@ import sqlite3 ### Write ```python <conn>.execute('<query>') # Can raise a subclass of sqlite3.Error. -<conn>.commit() # Commits all transactions since last commit. +<conn>.commit() # Saves all changes since the last commit. +<conn>.rollback() # Discards all changes since the last commit. ``` #### Or: ```python -with <conn>: - <conn>.execute('<query>') +with <conn>: # Exits block with commit() or rollback(), + <conn>.execute('<query>') # depending on whether an exception occurred. ``` ### Placeholders @@ -1901,7 +1903,7 @@ Bytes <bytes> = b'<str>' # Only accepts ASCII characters and \x00-\xff. <int> = <bytes>[<index>] # Returns int in range from 0 to 255. <bytes> = <bytes>[<slice>] # Returns bytes even if it has only one element. -<bytes> = <bytes>.join(<coll_of_bytes>) # Joins elements using bytes object as separator. +<bytes> = <bytes>.join(<coll_of_bytes>) # Joins elements using bytes as a separator. ``` ### Encode @@ -1950,6 +1952,7 @@ from struct import pack, unpack, iter_unpack <tuples> = iter_unpack('<format>', <bytes>) ``` +### Example ```python >>> pack('>hhl', 1, 2, 3) b'\x00\x01\x00\x02\x00\x00\x00\x03' @@ -2160,8 +2163,8 @@ from inspect import signature ``` -Metaprograming --------------- +Metaprogramming +--------------- **Code that generates code.** ### Type diff --git a/index.html b/index.html index 4b6f801..820e084 100644 --- a/index.html +++ b/index.html @@ -238,7 +238,7 @@ pre.prettyprint { <strong><span class="hljs-string"><span class="hljs-string">'3. Syntax'</span></span></strong>: [<a href="#arguments">Args</a>, <a href="#inline">Inline</a>, <a href="#closure">Closure</a>, <a href="#decorator">Decorator</a>, <a href="#class">Class</a>, <a href="#ducktypes">Duck_Type</a>, <a href="#enum">Enum</a>, <a href="#exceptions">Exception</a>], <strong><span class="hljs-string"><span class="hljs-string">'4. System'</span></span></strong>: [<a href="#exit">Exit</a>, <a href="#print">Print</a>, <a href="#input">Input</a>, <a href="#commandlinearguments">Command_Line_Arguments</a>, <a href="#open">Open</a>, <a href="#paths">Path</a>, <a href="#oscommands">OS_Commands</a>], <strong><span class="hljs-string"><span class="hljs-string">'5. Data'</span></span></strong>: [<a href="#json">JSON</a>, <a href="#pickle">Pickle</a>, <a href="#csv">CSV</a>, <a href="#sqlite">SQLite</a>, <a href="#bytes">Bytes</a>, <a href="#struct">Struct</a>, <a href="#array">Array</a>, <a href="#memoryview">Memory_View</a>, <a href="#deque">Deque</a>], - <strong><span class="hljs-string"><span class="hljs-string">'6. Advanced'</span></span></strong>: [<a href="#threading">Threading</a>, <a href="#operator">Operator</a>, <a href="#introspection">Introspection</a>, <a href="#metaprograming">Metaprograming</a>, <a href="#eval">Eval</a>, <a href="#coroutines">Coroutine</a>], + <strong><span class="hljs-string"><span class="hljs-string">'6. Advanced'</span></span></strong>: [<a href="#threading">Threading</a>, <a href="#operator">Operator</a>, <a href="#introspection">Introspection</a>, <a href="#metaprogramming">Metaprograming</a>, <a href="#eval">Eval</a>, <a href="#coroutines">Coroutine</a>], <strong><span class="hljs-string"><span class="hljs-string">'7. Libraries'</span></span></strong>: [<a href="#progressbar">Progress_Bar</a>, <a href="#plot">Plot</a>, <a href="#table">Table</a>, <a href="#curses">Curses</a>, <a href="#logging">Logging</a>, <a href="#scraping">Scraping</a>, <a href="#web">Web</a>, <a href="#profiling">Profile</a>, <a href="#numpy">NumPy</a>, <a href="#image">Image</a>, <a href="#audio">Audio</a>, <a href="#pygame">Games</a>, <a href="#pandas">Data</a>] } @@ -1556,6 +1556,7 @@ value = args.<name> <pre><code class="python language-python hljs">os.chdir(<path>) <span class="hljs-comment"># Changes the current working directory.</span> os.mkdir(<path>, mode=<span class="hljs-number">0o777</span>) <span class="hljs-comment"># Creates a directory. Mode is in octal.</span> +os.makedirs(<path>, mode=<span class="hljs-number">0o777</span>) <span class="hljs-comment"># Creates all directories in the path.</span> </code></pre> <pre><code class="python language-python hljs">shutil.copy(from, to) <span class="hljs-comment"># Copies the file. 'to' can exist or be a dir.</span> shutil.copytree(from, to) <span class="hljs-comment"># Copies the directory. 'to' must not exist.</span> @@ -1686,11 +1687,12 @@ CompletedProcess(args=[<span class="hljs-string">'bc'</span>, <span class="hljs- <div><h3 id="write-1">Write</h3><pre><code class="python language-python hljs"><conn>.execute(<span class="hljs-string">'<query>'</span>) <span class="hljs-comment"># Can raise a subclass of sqlite3.Error.</span> -<conn>.commit() <span class="hljs-comment"># Commits all transactions since last commit.</span> +<conn>.commit() <span class="hljs-comment"># Saves all changes since the last commit.</span> +<conn>.rollback() <span class="hljs-comment"># Discards all changes since the last commit.</span> </code></pre></div> -<div><h4 id="or">Or:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">with</span> <conn>: - <conn>.execute(<span class="hljs-string">'<query>'</span>) +<div><h4 id="or">Or:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">with</span> <conn>: <span class="hljs-comment"># Exits block with commit() or rollback(),</span> + <conn>.execute(<span class="hljs-string">'<query>'</span>) <span class="hljs-comment"># depending on whether an exception occurred.</span> </code></pre></div> <div><h3 id="placeholders">Placeholders</h3><ul> @@ -1724,7 +1726,7 @@ CompletedProcess(args=[<span class="hljs-string">'bc'</span>, <span class="hljs- <div><h2 id="bytes"><a href="#bytes" name="bytes">#</a>Bytes</h2><p><strong>Bytes object is an immutable sequence of single bytes. Mutable version is called bytearray.</strong></p><pre><code class="python language-python hljs"><bytes> = <span class="hljs-string">b'<str>'</span> <span class="hljs-comment"># Only accepts ASCII characters and \x00-\xff.</span> <int> = <bytes>[<index>] <span class="hljs-comment"># Returns int in range from 0 to 255.</span> <bytes> = <bytes>[<slice>] <span class="hljs-comment"># Returns bytes even if it has only one element.</span> -<bytes> = <bytes>.join(<coll_of_bytes>) <span class="hljs-comment"># Joins elements using bytes object as separator.</span> +<bytes> = <bytes>.join(<coll_of_bytes>) <span class="hljs-comment"># Joins elements using bytes as a separator.</span> </code></pre></div> @@ -1761,11 +1763,12 @@ CompletedProcess(args=[<span class="hljs-string">'bc'</span>, <span class="hljs- <tuple> = unpack(<span class="hljs-string">'<format>'</span>, <bytes>) <tuples> = iter_unpack(<span class="hljs-string">'<format>'</span>, <bytes>) </code></pre> -<pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>pack(<span class="hljs-string">'>hhl'</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>) +<div><h3 id="example-1">Example</h3><pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>pack(<span class="hljs-string">'>hhl'</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>) <span class="hljs-string">b'\x00\x01\x00\x02\x00\x00\x00\x03'</span> <span class="hljs-meta">>>> </span>unpack(<span class="hljs-string">'>hhl'</span>, <span class="hljs-string">b'\x00\x01\x00\x02\x00\x00\x00\x03'</span>) (<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>) -</code></pre> +</code></pre></div> + <div><h3 id="format-2">Format</h3><div><h4 id="forstandardtypesizesstartformatstringwith">For standard type sizes start format string with:</h4><ul> <li><strong><code class="python hljs"><span class="hljs-string">'='</span></code> - native byte order (usually little-endian)</strong></li> <li><strong><code class="python hljs"><span class="hljs-string">'<'</span></code> - little-endian</strong></li> @@ -1921,7 +1924,7 @@ delattr(<object>, <span class="hljs-string">'<attr_name>'</span>) <memb> = <Param>.kind <span class="hljs-comment"># Member of ParameterKind enum.</span> </code></pre></div> -<div><h2 id="metaprograming"><a href="#metaprograming" name="metaprograming">#</a>Metaprograming</h2><p><strong>Code that generates code.</strong></p><div><h3 id="type-1">Type</h3><p><strong>Type is the root class. If only passed an object it returns its type (class). Otherwise it creates a new class.</strong></p><pre><code class="python language-python hljs"><class> = type(<span class="hljs-string">'<class_name>'</span>, <parents_tuple>, <attributes_dict>)</code></pre></div></div> +<div><h2 id="metaprogramming"><a href="#metaprogramming" name="metaprogramming">#</a>Metaprogramming</h2><p><strong>Code that generates code.</strong></p><div><h3 id="type-1">Type</h3><p><strong>Type is the root class. If only passed an object it returns its type (class). Otherwise it creates a new class.</strong></p><pre><code class="python language-python hljs"><class> = type(<span class="hljs-string">'<class_name>'</span>, <parents_tuple>, <attributes_dict>)</code></pre></div></div> @@ -2300,7 +2303,7 @@ right = [[<span class="hljs-number">0.1</span> , <span class="hljs-number">0.6< right = [[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>], [<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>], [<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>]] <span class="hljs-comment"># Shape: (3, 3) <- !</span> </code></pre></div> -<div><h4 id="3ifneithernonmatchingdimensionhassize1raiseanerror">3. If neither non-matching dimension has size 1, raise an error.</h4><div><h3 id="example-1">Example</h3><div><h4 id="foreachpointreturnsindexofitsnearestpoint010608121">For each point returns index of its nearest point (<code class="python hljs">[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>] => [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>]</code>):</h4><pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>points = np.array([<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>]) +<div><h4 id="3ifneithernonmatchingdimensionhassize1raiseanerror">3. If neither non-matching dimension has size 1, raise an error.</h4><div><h3 id="example-2">Example</h3><div><h4 id="foreachpointreturnsindexofitsnearestpoint010608121">For each point returns index of its nearest point (<code class="python hljs">[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>] => [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>]</code>):</h4><pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>points = np.array([<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>]) [ <span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>] <span class="hljs-meta">>>> </span>wrapped_points = points.reshape(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>) [[ <span class="hljs-number">0.1</span>], diff --git a/parse.js b/parse.js index 2d56bc6..c760811 100755 --- a/parse.js +++ b/parse.js @@ -24,7 +24,7 @@ const TOC = ' <strong><span class="hljs-string">\'3. Syntax\'</span></strong>: [<a href="#arguments">Args</a>, <a href="#inline">Inline</a>, <a href="#closure">Closure</a>, <a href="#decorator">Decorator</a>, <a href="#class">Class</a>, <a href="#ducktypes">Duck_Type</a>, <a href="#enum">Enum</a>, <a href="#exceptions">Exception</a>],\n' + ' <strong><span class="hljs-string">\'4. System\'</span></strong>: [<a href="#exit">Exit</a>, <a href="#print">Print</a>, <a href="#input">Input</a>, <a href="#commandlinearguments">Command_Line_Arguments</a>, <a href="#open">Open</a>, <a href="#paths">Path</a>, <a href="#oscommands">OS_Commands</a>],\n' + ' <strong><span class="hljs-string">\'5. Data\'</span></strong>: [<a href="#json">JSON</a>, <a href="#pickle">Pickle</a>, <a href="#csv">CSV</a>, <a href="#sqlite">SQLite</a>, <a href="#bytes">Bytes</a>, <a href="#struct">Struct</a>, <a href="#array">Array</a>, <a href="#memoryview">Memory_View</a>, <a href="#deque">Deque</a>],\n' + - ' <strong><span class="hljs-string">\'6. Advanced\'</span></strong>: [<a href="#threading">Threading</a>, <a href="#operator">Operator</a>, <a href="#introspection">Introspection</a>, <a href="#metaprograming">Metaprograming</a>, <a href="#eval">Eval</a>, <a href="#coroutines">Coroutine</a>],\n' + + ' <strong><span class="hljs-string">\'6. Advanced\'</span></strong>: [<a href="#threading">Threading</a>, <a href="#operator">Operator</a>, <a href="#introspection">Introspection</a>, <a href="#metaprogramming">Metaprograming</a>, <a href="#eval">Eval</a>, <a href="#coroutines">Coroutine</a>],\n' + ' <strong><span class="hljs-string">\'7. Libraries\'</span></strong>: [<a href="#progressbar">Progress_Bar</a>, <a href="#plot">Plot</a>, <a href="#table">Table</a>, <a href="#curses">Curses</a>, <a href="#logging">Logging</a>, <a href="#scraping">Scraping</a>, <a href="#web">Web</a>, <a href="#profiling">Profile</a>,\n' + ' <a href="#numpy">NumPy</a>, <a href="#image">Image</a>, <a href="#audio">Audio</a>, <a href="#pygame">Games</a>, <a href="#pandas">Data</a>]\n' + '}\n' + diff --git a/pdf/index_for_pdf.html b/pdf/index_for_pdf.html index 43ffa77..afd9e5c 100644 --- a/pdf/index_for_pdf.html +++ b/pdf/index_for_pdf.html @@ -20,7 +20,7 @@ <h3 id="c">C</h3> <p><strong>cache, <a href="#lrucache">13</a></strong><br> <strong>callable, <a href="#callable">17</a></strong><br> -<strong>class, <a href="#type">4</a>, <a href="#class">14</a>-<a href="#inline-2">20</a>, <a href="#metaprograming">31</a>-<a href="#metaclass">32</a></strong><br> +<strong>class, <a href="#type">4</a>, <a href="#class">14</a>-<a href="#inline-2">20</a>, <a href="#metaprogramming">31</a>-<a href="#metaclass">32</a></strong><br> <strong>closure, <a href="#closure">12</a>-<a href="#decorator">13</a></strong><br> <strong>collection, <a href="#abstractbaseclasses">4</a>, <a href="#collection">18</a>, <a href="#tableofrequiredandautomaticallyavailablespecialmethods">19</a></strong><br> <strong>collections module, <a href="#dictionary">2</a>, <a href="#namedtuple">3</a>, <a href="#abstractbaseclasses">4</a>, <a href="#abcsequence">19</a>, <a href="#deque">29</a></strong><br> @@ -85,7 +85,7 @@ <strong>math module, <a href="#math">7</a></strong><br> <strong>memoryviews, <a href="#memoryview">29</a></strong><br> <strong>metaclass attribute, <a href="#metaclassattribute">32</a></strong><br> -<strong>metaprograming, <a href="#metaprograming">31</a>-<a href="#metaclass">32</a></strong><br> +<strong>metaprogramming, <a href="#metaprogramming">31</a>-<a href="#metaclass">32</a></strong><br> <strong>mysql library, <a href="#mysql">27</a></strong> </p> <h3 id="n">N</h3> <p><strong>namedtuples, <a href="#namedtuple">3</a></strong><br> @@ -139,7 +139,7 @@ <strong>threading module, <a href="#threading">30</a></strong><br> <strong>time module, <a href="#progressbar">34</a>, <a href="#stopwatch">36</a></strong><br> <strong>tuples, <a href="#tuple">3</a>, <a href="#abstractbaseclasses">4</a>, <a href="#otheruses">11</a></strong><br> -<strong>type, <a href="#type">4</a>, <a href="#metaprograming">31</a>-<a href="#metaclass">32</a></strong> </p> +<strong>type, <a href="#type">4</a>, <a href="#metaprogramming">31</a>-<a href="#metaclass">32</a></strong> </p> <h3 id="w">W</h3> <p><strong>wave module, <a href="#audio">40</a>-<a href="#writefloatsamplestowavfile">41</a></strong><br> <strong>web, <a href="#web">36</a></strong> </p> diff --git a/web/script_2.js b/web/script_2.js index 97691b4..efb56e9 100644 --- a/web/script_2.js +++ b/web/script_2.js @@ -5,7 +5,7 @@ const TOC = ' <strong><span class="hljs-string">\'3. Syntax\'</span></strong>: [<a href="#arguments">Args</a>, <a href="#inline">Inline</a>, <a href="#closure">Closure</a>, <a href="#decorator">Decorator</a>, <a href="#class">Class</a>, <a href="#ducktypes">Duck_Type</a>, <a href="#enum">Enum</a>, <a href="#exceptions">Exception</a>],\n' + ' <strong><span class="hljs-string">\'4. System\'</span></strong>: [<a href="#exit">Exit</a>, <a href="#print">Print</a>, <a href="#input">Input</a>, <a href="#commandlinearguments">Command_Line_Arguments</a>, <a href="#open">Open</a>, <a href="#paths">Path</a>, <a href="#oscommands">OS_Commands</a>],\n' + ' <strong><span class="hljs-string">\'5. Data\'</span></strong>: [<a href="#json">JSON</a>, <a href="#pickle">Pickle</a>, <a href="#csv">CSV</a>, <a href="#sqlite">SQLite</a>, <a href="#bytes">Bytes</a>, <a href="#struct">Struct</a>, <a href="#array">Array</a>, <a href="#memoryview">Memory_View</a>, <a href="#deque">Deque</a>],\n' + - ' <strong><span class="hljs-string">\'6. Advanced\'</span></strong>: [<a href="#threading">Threading</a>, <a href="#operator">Operator</a>, <a href="#introspection">Introspection</a>, <a href="#metaprograming">Metaprograming</a>, <a href="#eval">Eval</a>, <a href="#coroutines">Coroutine</a>],\n' + + ' <strong><span class="hljs-string">\'6. Advanced\'</span></strong>: [<a href="#threading">Threading</a>, <a href="#operator">Operator</a>, <a href="#introspection">Introspection</a>, <a href="#metaprogramming">Metaprograming</a>, <a href="#eval">Eval</a>, <a href="#coroutines">Coroutine</a>],\n' + ' <strong><span class="hljs-string">\'7. Libraries\'</span></strong>: [<a href="#progressbar">Progress_Bar</a>, <a href="#plot">Plot</a>, <a href="#table">Table</a>, <a href="#curses">Curses</a>, <a href="#logging">Logging</a>, <a href="#scraping">Scraping</a>, <a href="#web">Web</a>, <a href="#profiling">Profile</a>,\n' + ' <a href="#numpy">NumPy</a>, <a href="#image">Image</a>, <a href="#audio">Audio</a>, <a href="#pygame">Games</a>, <a href="#pandas">Data</a>]\n' + '}\n'; @@ -30,7 +30,7 @@ const TOC_MOBILE = ' <a href="#memoryview">Memory_View</a>, <a href="#deque">Deque</a>],\n' + ' <strong><span class="hljs-string">\'6. Advanced\'</span></strong>: [<a href="#threading">Threading</a>, <a href="#operator">Operator</a>,\n' + ' <a href="#introspection">Introspection</a>,\n' + - ' <a href="#metaprograming">Metaprograming</a>, <a href="#eval">Eval</a>,\n' + + ' <a href="#metaprogramming">Metaprograming</a>, <a href="#eval">Eval</a>,\n' + ' <a href="#coroutines">Coroutine</a>],\n' + ' <strong><span class="hljs-string">\'7. Libraries\'</span></strong>: [<a href="#progressbar">Progress_Bar</a>, <a href="#plot">Plot</a>, <a href="#table">Table</a>,\n' + ' <a href="#curses">Curses</a>, <a href="#logging">Logging</a>, <a href="#scraping">Scraping</a>,\n' +