Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
other:python:misc_by_jyp [2021/08/18 16:04] – Added pprint section jypeter | other:python:misc_by_jyp [2021/09/17 15:41] – [Printing a readable version of long lists or dictionaries] Replaced ordered dict with a regular dict 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 === |
>>> sum(files_sizes) | >>> sum(files_sizes) |
64792</code> | 64792</code> |
| |
| ==== Generating file names ==== |
| |
| === Name depending on the current date/time === |
| |
| <code>>>> import time |
| >>> plot_version = time.strftime('%Y%m%d_%H%M') |
| >>> f_name = 'test_%s.nc' % (plot_version,) |
| >>> f_name |
| 'test_20210827_1334.nc' |
| </code> |
| |
| === Temporary file === |
| |
| <code>>>> import tempfile, os |
| >>> f_tmp = tempfile.NamedTemporaryFile(mode='w', suffix='.nc', delete=False) |
| >>> f_tmp |
| <tempfile._TemporaryFileWrapper object at 0x2b5614743820> |
| >>> f_tmp.name |
| '/tmp/tmpi6uk9hre.nc' |
| >>> f_tmp.close() |
| >>> os.remove(f_tmp.name)</code> |
==== Using command-line arguments ==== | ==== Using command-line arguments ==== |
| |
==== 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 ==== | ==== 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 | 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 | <code>>>> import 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'}})]) | >>> test_dic = {'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) | >>> 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'}})]) | {'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) | >>> pprint.pprint(test_dic) |
OrderedDict([('AWI-ESM-1-1-LR_AWI', {'r1i1p1f1': {'grid': 'gn'}}), | {'AWI-ESM-1-1-LR_AWI': {'r1i1p1f1': {'grid': 'gn'}}, |
('CESM2_NCAR', {'r1i1p1f1': {'grid': 'gn'}}), | 'CESM2_NCAR': {'r1i1p1f1': {'grid': 'gn'}}, |
('IPSL-CM6A-LR_IPSL', | 'IPSL-CM6A-LR_IPSL': {'r1i1p1f1': {'grid': 'gr'}, |
{'r1i1p1f1': {'grid': 'gr'}, | 'r1i1p1f2': {'grid': 'gr'}, |
'r1i1p1f2': {'grid': 'gr'}, | 'r1i1p1f3': {'grid': 'gr'}, |
'r1i1p1f3': {'grid': 'gr'}, | 'r1i1p1f4': {'grid': 'gr'}}} |
'r1i1p1f4': {'grid': 'gr'}})]) | |
</code> | </code> |
| |