<li><strong>Floats can be compared with: <codeclass="python hljs"><spanclass="hljs-string">'math.isclose(<float>, <float>)'</span></code>.</strong></li>
<li><strong>Precision of decimal operations is set with: <codeclass="python hljs"><spanclass="hljs-string">'decimal.getcontext().prec = <int>'</span></code>.</strong></li>
<div><h3id="math">Math</h3><pre><codeclass="python language-python hljs"><spanclass="hljs-keyword">from</span> math <spanclass="hljs-keyword">import</span> e, pi, inf, nan, isinf, isnan
<spanclass="hljs-keyword">from</span> math <spanclass="hljs-keyword">import</span> sin, cos, tan, asin, acos, atan, degrees, radians
<spanclass="hljs-keyword">from</span> math <spanclass="hljs-keyword">import</span> log, log10, log2
<div><h3id="math">Math</h3><pre><codeclass="python language-python hljs"><spanclass="hljs-keyword">from</span> math <spanclass="hljs-keyword">import</span> e, pi, inf, nan, isinf, isnan<spanclass="hljs-comment"># `<el> == nan` is always False.</span>
<spanclass="hljs-keyword">from</span> math <spanclass="hljs-keyword">import</span> sin, cos, tan, asin, acos, atan<spanclass="hljs-comment"># Also: degrees, radians.</span>
<spanclass="hljs-keyword">from</span> math <spanclass="hljs-keyword">import</span> log, log10, log2<spanclass="hljs-comment"># Log can accept base as second arg.</span>
<pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>product(<spanclass="hljs-string">'abc'</span>, <spanclass="hljs-string">'abc'</span>) <spanclass="hljs-comment"># a b c</span>
[(<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># a x x x</span>
(<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># b x x x</span>
(<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'c'</span>)] <spanclass="hljs-comment"># c x x x</span>
<pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>it.product(<spanclass="hljs-string">'abc'</span>, <spanclass="hljs-string">'abc'</span>)<spanclass="hljs-comment"># a b c</span>
[(<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># a x x x</span>
(<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># b x x x</span>
(<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'c'</span>)] <spanclass="hljs-comment"># c x x x</span>
</code></pre>
<pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>combinations(<spanclass="hljs-string">'abc'</span>, <spanclass="hljs-number">2</span>) <spanclass="hljs-comment"># a b c</span>
[(<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># a . x x</span>
(<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'c'</span>)] <spanclass="hljs-comment"># b . . x</span>
<pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>it.combinations(<spanclass="hljs-string">'abc'</span>, <spanclass="hljs-number">2</span>)<spanclass="hljs-comment"># a b c</span>
[(<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># a . x x</span>
(<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'c'</span>)] <spanclass="hljs-comment"># b . . x</span>
</code></pre>
<pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>combinations_with_replacement(<spanclass="hljs-string">'abc'</span>, <spanclass="hljs-number">2</span>) <spanclass="hljs-comment"># a b c</span>
[(<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># a x x x</span>
(<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># b . x x</span>
(<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'c'</span>)] <spanclass="hljs-comment"># c . . x</span>
<pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>it.combinations_with_replacement(<spanclass="hljs-string">'abc'</span>, <spanclass="hljs-number">2</span>)<spanclass="hljs-comment"># a b c</span>
[(<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># a x x x</span>
(<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># b . x x</span>
(<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'c'</span>)] <spanclass="hljs-comment"># c . . x</span>
</code></pre>
<pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>permutations(<spanclass="hljs-string">'abc'</span>, <spanclass="hljs-number">2</span>) <spanclass="hljs-comment"># a b c</span>
[(<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># a . x x</span>
(<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># b x . x</span>
(<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'b'</span>)] <spanclass="hljs-comment"># c x x .</span>
<pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>it.permutations(<spanclass="hljs-string">'abc'</span>, <spanclass="hljs-number">2</span>)<spanclass="hljs-comment"># a b c</span>
[(<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'b'</span>), (<spanclass="hljs-string">'a'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># a . x x</span>
(<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'b'</span>, <spanclass="hljs-string">'c'</span>), <spanclass="hljs-comment"># b x . x</span>
(<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'a'</span>), (<spanclass="hljs-string">'c'</span>, <spanclass="hljs-string">'b'</span>)] <spanclass="hljs-comment"># c x x .</span>
<pre><codeclass="python language-python hljs">os.chdir(<path>) <spanclass="hljs-comment"># Changes the current working directory.</span>
os.mkdir(<path>, mode=<spanclass="hljs-number">0o777</span>) <spanclass="hljs-comment"># Creates a directory. Mode is in octal.</span>
os.makedirs(<path>, mode=<spanclass="hljs-number">0o777</span>) <spanclass="hljs-comment"># Creates all path's dirs. Also: `exist_ok=False`.</span>
<pre><codeclass="python language-python hljs">os.chdir(<path>) <spanclass="hljs-comment"># Changes the current working directory.</span>
os.mkdir(<path>, mode=<spanclass="hljs-number">0o777</span>) <spanclass="hljs-comment"># Creates a directory. Permissions are in octal.</span>
os.makedirs(<path>, mode=<spanclass="hljs-number">0o777</span>) <spanclass="hljs-comment"># Creates all path's dirs. Also: `exist_ok=False`.</span>
</code></pre>
<pre><codeclass="python language-python hljs">shutil.copy(from, to) <spanclass="hljs-comment"># Copies the file. 'to' can exist or be a dir.</span>
shutil.copytree(from, to) <spanclass="hljs-comment"># Copies the directory. 'to' must not exist.</span>
<pre><codeclass="python language-python hljs">shutil.copy(from, to) <spanclass="hljs-comment"># Copies the file. 'to' can exist or be a dir.</span>
shutil.copytree(from, to) <spanclass="hljs-comment"># Copies the directory. 'to' must not exist.</span>
</code></pre>
<pre><codeclass="python language-python hljs">os.rename(from, to) <spanclass="hljs-comment"># Renames/moves the file or directory.</span>
os.replace(from, to) <spanclass="hljs-comment"># Same, but overwrites 'to' if it exists.</span>
<pre><codeclass="python language-python hljs">os.rename(from, to) <spanclass="hljs-comment"># Renames/moves the file or directory.</span>
os.replace(from, to) <spanclass="hljs-comment"># Same, but overwrites 'to' if it exists.</span>
</code></pre>
<pre><codeclass="python language-python hljs">os.remove(<path>) <spanclass="hljs-comment"># Deletes the file.</span>
os.rmdir(<path>) <spanclass="hljs-comment"># Deletes the empty directory.</span>
shutil.rmtree(<path>) <spanclass="hljs-comment"># Deletes the directory.</span>
<pre><codeclass="python language-python hljs">os.remove(<path>) <spanclass="hljs-comment"># Deletes the file.</span>
os.rmdir(<path>) <spanclass="hljs-comment"># Deletes the empty directory.</span>
shutil.rmtree(<path>) <spanclass="hljs-comment"># Deletes the directory.</span>
</code></pre>
<ul>
<li><strong>Paths can be either strings, Paths or DirEntry objects.</strong></li>
<li><strong>Functions report OS related errors by raising either OSError or one of its <ahref="#exceptions-1">subclasses</a>.</strong></li>
</ul>
<div><h3id="shellcommands">Shell Commands</h3><pre><codeclass="python language-python hljs"><pipe> = os.popen(<spanclass="hljs-string">'<command>'</span>) <spanclass="hljs-comment"># Executes command in sh/cmd and returns its stdout pipe.</span>
<str> = <pipe>.read(size=<spanclass="hljs-number">-1</span>) <spanclass="hljs-comment"># Reads 'size' chars or until EOF. Also readline/s().</span>
<int> = <pipe>.close() <spanclass="hljs-comment"># Closes the pipe. Returns None on success, int on error.</span>
<div><h3id="shellcommands">Shell Commands</h3><pre><codeclass="python language-python hljs"><pipe> = os.popen(<spanclass="hljs-string">'<command>'</span>) <spanclass="hljs-comment"># Executes command in sh/cmd. Returns its stdout pipe.</span>
<str> = <pipe>.read(size=<spanclass="hljs-number">-1</span>) <spanclass="hljs-comment"># Reads 'size' chars or until EOF. Also readline/s().</span>
<int> = <pipe>.close() <spanclass="hljs-comment"># Closes the pipe. Returns None on success.</span>
</code></pre></div>
<div><h4id="sends11tothebasiccalculatorandcapturesitsoutput">Sends '1 + 1' to the basic calculator and captures its output:</h4><pre><codeclass="python language-python hljs"><spanclass="hljs-meta">>>></span>subprocess.run(<spanclass="hljs-string">'bc'</span>, input=<spanclass="hljs-string">'1 + 1\n'</span>, capture_output=<spanclass="hljs-keyword">True</span>, text=<spanclass="hljs-keyword">True</span>)
<div><h2id="json"><ahref="#json"name="json">#</a>JSON</h2><p><strong>Text file format for storing collections of strings and numbers.</strong></p><pre><codeclass="python language-python hljs"><spanclass="hljs-keyword">import</span> json
<str> = json.dumps(<object>) <spanclass="hljs-comment"># Converts object to JSON string.</span>
<object> = json.loads(<str>) <spanclass="hljs-comment"># Converts JSON string to object.</span>
<str> = json.dumps(<object>) <spanclass="hljs-comment"># Converts object to JSON string.</span>
<object> = json.loads(<str>) <spanclass="hljs-comment"># Converts JSON string to object.</span>
<div><h2id="pickle"><ahref="#pickle"name="pickle">#</a>Pickle</h2><p><strong>Binary file format for storing Python objects.</strong></p><pre><codeclass="python language-python hljs"><spanclass="hljs-keyword">import</span> pickle
<bytes> = pickle.dumps(<object>) <spanclass="hljs-comment"># Converts object to bytes object.</span>
<object> = pickle.loads(<bytes>) <spanclass="hljs-comment"># Converts bytes object to object.</span>
<bytes> = pickle.dumps(<object>) <spanclass="hljs-comment"># Converts object to bytes object.</span>
<object> = pickle.loads(<bytes>) <spanclass="hljs-comment"># Converts bytes object to object.</span>