1.2.7. Standard Library

Note

Reference document for this section:

1.2.7.1. os module: operating system functionality

“A portable way of using operating system dependent functionality.”

Directory and file manipulation

Current directory:

In [1]: import os
In [2]: os.getcwd()
Out[2]: '/tmp'

List a directory:

In [3]: os.listdir(os.curdir)
Out[3]:
['clr-debug-pipe-839-1100-in',
'profile_ao_ef_5l',
'profile_y424q1o7',
'profile_gcdsodps',
'profile_20cgkwjo',
'profile_85ncnwev',
'profile_9k2u62z4',
'profile_1eumx7cl',
'.XIM-unix',
'profile_ztfu_5r8',
'profile_etunz_6q',
'systemd-private-9336c1a627914f2d91a5bafcc63644f7-polkit.service-nXWF0X',
'dotnet-diagnostic-1740-15547-socket',
'profile_06ybu63g',
'profile_rkrik4y7',
'clr-debug-pipe-1740-15547-in',
'profile_n7jg5xmd',
'clr-debug-pipe-839-1100-out',
'profile_cijz7e21',
'.font-unix',
'profile_8icsxw6q',
'profile_gv7wn17u',
'profile_n9s0txmn',
'profile_4c18d864',
'systemd-private-9336c1a627914f2d91a5bafcc63644f7-systemd-logind.service-CykK8F',
'profile_1wm8ws_x',
'profile_gu6ls6ii',
'hsperfdata_root',
'profile__z_yjaqs',
'.X11-unix',
'snap-private-tmp',
'profile_7usf7hyz',
'profile_66qhlzcr',
'profile_f5yyt2rt',
'profile_eupe6yzu',
'systemd-private-9336c1a627914f2d91a5bafcc63644f7-chrony.service-YQU1y6',
'profile_xvywtw5f',
'profile_464dadbp',
'profile_0nqki0ci',
'dotnet-diagnostic-839-1100-socket',
'profile_i98r3wy1',
'profile_l20iyohn',
'profile_ajz8_588',
'profile_mrfq2w7p',
'systemd-private-9336c1a627914f2d91a5bafcc63644f7-systemd-resolved.service-wmCo1I',
'systemd-private-9336c1a627914f2d91a5bafcc63644f7-haveged.service-8O3QhQ',
'profile_ednrnk0c',
'profile_jx0fm5hs',
'profile_0oqu22pa',
'profile_vw2vihjo',
'profile_axtc9x8v',
'profile_y5m91df5',
'profile_ul7v_156',
'profile_6c0pmhk8',
'profile_n3dm0r1f',
'systemd-private-9336c1a627914f2d91a5bafcc63644f7-ModemManager.service-CEa0Bw',
'profile_0smk8kx0',
'profile_v8gdjkq6',
'profile_net23doj',
'profile_otkz3vgq',
'profile_j9iw_fnf',
'clr-debug-pipe-1756-15661-out',
'profile_tg9_n6du',
'profile_ioh3ovru',
'clr-debug-pipe-1740-15547-out',
'profile_a_g1z9xx',
'profile_2tgibewv',
'profile_r42i6nm6',
'dotnet-diagnostic-1756-15661-socket',
'profile_mazur5fa',
'profile_jvr1kj9g',
'profile_kw8l4eoe',
'profile_kd_f23zx',
'profile_rr2gs5at',
'profile_wd_l_xc4',
'profile_hmsbfkb7',
'profile_wud115fz',
'profile_2fh37tbk',
'profile_12h5ub1h',
'profile_h1ui6i5k',
'profile_49p2isko',
'profile_swpcgp78',
'profile_idb6ic1l',
'profile_ypbztpto',
'.ICE-unix',
'profile_mco9rsd4',
'profile_dhuy_ll_',
'clr-debug-pipe-1756-15661-in',
'profile_6dxb2l_a',
'profile_7psmjug3',
'profile_8d7xirlb']

Make a directory:

In [4]: os.mkdir('junkdir')
In [5]: 'junkdir' in os.listdir(os.curdir)
Out[5]: True

Rename the directory:

In [6]: os.rename('junkdir', 'foodir')
In [7]: 'junkdir' in os.listdir(os.curdir)
Out[7]: False
In [8]: 'foodir' in os.listdir(os.curdir)
Out[8]: True
In [9]: os.rmdir('foodir')
In [10]: 'foodir' in os.listdir(os.curdir)
Out[10]: False

Delete a file:

In [11]: fp = open('junk.txt', 'w')
In [12]: fp.close()
In [13]: 'junk.txt' in os.listdir(os.curdir)
Out[13]: True
In [14]: os.remove('junk.txt')
In [15]: 'junk.txt' in os.listdir(os.curdir)
Out[15]: False

os.path: path manipulations

os.path provides common operations on pathnames.

In [16]: fp = open('junk.txt', 'w')
In [17]: fp.close()
In [18]: a = os.path.abspath('junk.txt')
In [19]: a
Out[19]: '/tmp/junk.txt'
In [20]: os.path.split(a)
Out[20]: ('/tmp', 'junk.txt')
In [21]: os.path.dirname(a)
Out[21]: '/tmp'
In [22]: os.path.basename(a)
Out[22]: 'junk.txt'
In [23]: os.path.splitext(os.path.basename(a))
Out[23]: ('junk', '.txt')
In [24]: os.path.exists('junk.txt')
Out[24]: True
In [25]: os.path.isfile('junk.txt')
Out[25]: True
In [26]: os.path.isdir('junk.txt')
Out[26]: False
In [27]: os.path.expanduser('~/local')
Out[27]: '/home/runner/local'
In [28]: os.path.join(os.path.expanduser('~'), 'local', 'bin')
Out[28]: '/home/runner/local/bin'

Running an external command

In [29]: os.system('ls')
Out[29]: 0

Note

Alternative to os.system

A noteworthy alternative to os.system is the sh module. Which provides much more convenient ways to obtain the output, error stream and exit code of the external command.

In [30]: import sh
In [31]: com = sh.ls()
In [31]: print(com)
basic_types.rst exceptions.rst oop.rst standard_library.rst
control_flow.rst first_steps.rst python_language.rst
demo2.py functions.rst python-logo.png
demo.py io.rst reusing_code.rst
In [32]: type(com)
Out[32]: str

Walking a directory

os.path.walk generates a list of filenames in a directory tree.

In [33]: for dirpath, dirnames, filenames in os.walk(os.curdir):
....: for fp in filenames:
....: print(os.path.abspath(fp))
....:
....:
/tmp/clr-debug-pipe-839-1100-in
/tmp/dotnet-diagnostic-1740-15547-socket
/tmp/clr-debug-pipe-1740-15547-in
/tmp/clr-debug-pipe-839-1100-out
/tmp/dotnet-diagnostic-839-1100-socket
/tmp/junk.txt
/tmp/clr-debug-pipe-1756-15661-out
/tmp/clr-debug-pipe-1740-15547-out
/tmp/dotnet-diagnostic-1756-15661-socket
/tmp/clr-debug-pipe-1756-15661-in
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/bookmarks
/tmp/dhist
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README
/tmp/README

Environment variables:

In [34]: os.environ.keys()
Out[34]: KeysView(environ({'SHELL': '/bin/bash', 'COLORTERM': 'truecolor', ...}))
In [35]: os.environ['SHELL']
Out[35]: '/bin/bash'

1.2.7.2. shutil: high-level file operations

The shutil provides useful file operations:

  • shutil.rmtree: Recursively delete a directory tree.

  • shutil.move: Recursively move a file or directory to another location.

  • shutil.copy: Copy files or directories.

1.2.7.3. glob: Pattern matching on files

The glob module provides convenient file pattern matching.

Find all files ending in .txt:

In [36]: import glob
In [37]: glob.glob('*.txt')
Out[37]: ['junk.txt']

1.2.7.4. sys module: system-specific information

System-specific information related to the Python interpreter.

  • Which version of python are you running and where is it installed:

In [38]: import sys
In [39]: sys.platform
Out[39]: 'linux'
In [40]: sys.version
Out[40]: '3.12.10 (main, Apr 8 2025, 22:38:13) [GCC 13.3.0]'
In [41]: sys.prefix
Out[41]: '/opt/hostedtoolcache/Python/3.12.10/x64'
  • List of command line arguments passed to a Python script:

In [42]: sys.argv
Out[42]:
['/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages/sphinx/__main__.py',
'-b',
'latex',
'-d',
'build/doctrees',
'.',
'build/latex']

sys.path is a list of strings that specifies the search path for modules. Initialized from PYTHONPATH:

In [43]: sys.path
Out[43]:
['/home/runner/work/scientific-python-lectures/scientific-python-lectures',
'/opt/hostedtoolcache/Python/3.12.10/x64/lib/python312.zip',
'/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12',
'/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/lib-dynload',
'/opt/hostedtoolcache/Python/3.12.10/x64/lib/python3.12/site-packages']

1.2.7.5. pickle: easy persistence

Useful to store arbitrary objects to a file. Not safe or fast!

In [44]: import pickle
In [45]: l = [1, None, 'Stan']
In [46]: with open('test.pkl', 'wb') as file:
....: pickle.dump(l, file)
....:
In [47]: with open('test.pkl', 'rb') as file:
....: out = pickle.load(file)
....:
In [48]: out
Out[48]: [1, None, 'Stan']

The PYTHONPATH Search Solution