Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
other:python:misc_by_jyp [2021/08/16 16:19] – [Useful python stuff] jypeter | other:python:misc_by_jyp [2021/08/25 14:40] – [Working with paths and filenames] Improved example jypeter |
---|
* [[https://docs.python.org/3/library/pathlib.html#correspondence-to-tools-in-the-os-module|Matching pathlib, and os or os.path functions]] | * [[https://docs.python.org/3/library/pathlib.html#correspondence-to-tools-in-the-os-module|Matching pathlib, and os or os.path functions]] |
* [[https://docs.python.org/3/library/shutil.html|High-level file operations]] | * [[https://docs.python.org/3/library/shutil.html|High-level file operations]] |
| |
| |
| === Example: getting the full path of the Python used === |
| |
| Note: the actual python may be different from the default python! |
| |
| <code>$ which python |
| /usr/bin/python |
| |
| $ /modfs/modtools/miniconda3//envs/analyse_3.6_test/bin/python |
| >>> import sys, shutil |
| >>> shutil.which('python') |
| '/usr/bin/python' |
| >>> sys.executable |
| '/modfs/modtools/miniconda3//envs/analyse_3.6_test/bin/python'</code> |
| |
| |
| === Example: getting the full path of a script === |
| |
| <code>>>> import os |
| >>> os.getcwd() |
| '/home/jypmce/PMIP4' |
| >>> os.path.exists('./argv_test.py') |
| True |
| >>> os.path.abspath('./argv_test.py') |
| '/home/jypmce/PMIP4/argv_test.py' |
| >>> os.path.exists('/home/jypmce/PMIP4/argv_test.py') |
| True |
| </code> |
| |
| |
=== Example: getting the size(s) of all the files in a directory === | === Example: getting the size(s) of all the files in a directory === |
==== Using ordered dictionaries ==== | ==== Using ordered dictionaries ==== |
| |
Check the [[https://realpython.com/python-ordereddict/|OrderedDict vs dict in Python: The Right Tool for the Job]] tutorial | **Dictionary order is guaranteed to be insertion order**! Note that the [[https://docs.python.org/3/library/stdtypes.html#dict|usual Python dictionary]] also guarantees the order since version **3.6** |
| |
| Check the [[https://docs.python.org/3/library/collections.html#collections.OrderedDict|OrderedDict class]] (''from collections import OrderedDict'') and the [[https://realpython.com/python-ordereddict/|OrderedDict vs dict in Python: The Right Tool for the Job]] tutorial |
| |
| ==== Printing a readable version of long lists or dictionaries ==== |
| |
| The [[https://docs.python.org/3/library/pprint.html|pprint]] module can be used for //pretty printing// objects (lists, dictionaries, ...). It will wrap long lines in a meaningful way |
| |
| <code>>>> from collections import OrderedDict |
| |
| >>> test_dic = OrderedDict([('AWI-ESM-1-1-LR_AWI', {'r1i1p1f1': {'grid': 'gn'}}), ('CESM2_NCAR', {'r1i1p1f1': {'grid': 'gn'}}), ('IPSL-CM6A-LR_IPSL', {'r1i1p1f1': {'grid': 'gr'}, 'r1i1p1f2': {'grid': 'gr'}, 'r1i1p1f3': {'grid': 'gr'}, 'r1i1p1f4': {'grid': 'gr'}})]) |
| |
| >>> print(test_dic) |
| OrderedDict([('AWI-ESM-1-1-LR_AWI', {'r1i1p1f1': {'grid': 'gn'}}), ('CESM2_NCAR', {'r1i1p1f1': {'grid': 'gn'}}), ('IPSL-CM6A-LR_IPSL', {'r1i1p1f1': {'grid': 'gr'}, 'r1i1p1f2': {'grid': 'gr'}, 'r1i1p1f3': {'grid': 'gr'}, 'r1i1p1f4': {'grid': 'gr'}})]) |
| |
| >>> pprint.pprint(test_dic) |
| OrderedDict([('AWI-ESM-1-1-LR_AWI', {'r1i1p1f1': {'grid': 'gn'}}), |
| ('CESM2_NCAR', {'r1i1p1f1': {'grid': 'gn'}}), |
| ('IPSL-CM6A-LR_IPSL', |
| {'r1i1p1f1': {'grid': 'gr'}, |
| 'r1i1p1f2': {'grid': 'gr'}, |
| 'r1i1p1f3': {'grid': 'gr'}, |
| 'r1i1p1f4': {'grid': 'gr'}})]) |
| </code> |
| |
/* | /* |