Python basics
Debugging:#
import pprint
pprint.pprint(randomObj.\_\_dict\_\_) => Prints all the attributes & their values in an object
dir(randomObj) => enumerates attributes & methods in an object
inspect(module) => Allows you to inspect a module
Import statements:#
Absolute vs. Relative Import
-
An absolute import uses the full path (starting from the project’s root folder) to the desired module to import.
-
A relative import uses the relative path (starting from the path of the current module) to the desired desired module to import. There are two types of relative imports:
-
explicit relative import follows the format from .<module/package> import X, where <module/package> is prefixed by dots . that indicate how many directories upwards to traverse. A single dot . corresponds to the current directory; two dots .. indicate one folder up; etc.
-
Implicit: deprecated. Don't use
-
Use absolute imports rooted at the test/ directory (i.e. middle column in the table above). This guarantees that running start.py directly will always work. In order to run a2.py directly, we can modify sys.path in a2.py to include test/packA/, before sa2 is imported.
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
Now this works, even when a2.py is run directly#
from packA.subA import sa2
https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html
Logging:#
print("")
import os
os.environ['HOME'] will retrieve the environment variable. os.environ is a dictionary
os.environ.get('KEY') will return None if the key doesn't exist instead of raising KeyError
Directory Traversal:#
http://www.diveintopython.net/file_handling/os_module.html
https://docs.python.org/2/library/filesys.html
You can use glob:
import glob
import os
os.chdir("/mydir")for file in glob.glob("*.txt"):
print file
or simply os.listdir:
import os
for file in os.listdir("/mydir"):
if file.endswith(".txt"):
print file
or if you want to traverse directory:
import os
for root, dirs, files in os.walk("/mydir"):
for file in files:
if file.endswith(".txt"):
print os.path.join(root, file)
List immediate child subdirectories:
next(os.walk('.')) [1]
Reference From https://stackoverflow.com/questions/973473/getting-a-list-of-all-subdirectories-in-the-current-directory
Convert Path:#
Renaming Script in directory and append number based on name sort order:#
import os, glob
files = glob.glob('/Users/ikrima/src/MythlyRepos/CineX/Photogrammetry/CineX/TAJA/Distortion/renames/*.tif')
files.sort()
for i in xrange(0, len(files)):
filename,ext = os.path.splitext(os.path.basename(files[i]))
os.rename(files[i], os.path.join(os.path.dirname(files[i]), filename + ".%07d" % i + ext))
Executing shell commands#
os.system("some_command with args")
Reference From http://stackoverflow.com/questions/89228/calling-an-external-command-in-python
import subprocess
proc = subprocess.Popen(["cat", "/tmp/baz"], stdout=subprocess.PIPE)
(out, err) = proc.communicate()
print "program output:", out
Directory/Filesystem Traversal:#
os.chdir()/os.getcwd()
https://docs.python.org/2/library/os.html#os-file-dir
Object as dictionary:#
obj = Foo()
dict(obj)
Unzip List of Tuples:#
zipper_list = [(1, 'a'), (2, 'b'), (3, 'c')]
list_a, list_b = zip(*zipper_list)
Strings: | |
---|---|
Unicode string | u'bla' |
Unescaped | r'bla\d' |
String interpolation with formatting | f'{bla:10}' |
String Formatting:#
f'This is inline string interpolation {bla:10}'
Examples:
f'{a:02}' => '01'S
https://www.programiz.com/python-programming/methods/string/format#numbers
The general form of a standard format specifier is:
[[fill]align] [sign] [#] [0] [minimumwidth] [.precision] [type]
Reference From https://www.python.org/dev/peps/pep-3101/#standard-format-specifiers
[[fill]align][sign] [#][0] [width][,] [.precision][type]
where, the options are
fill ::= any character
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= integer
precision ::= integer
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Reference From https://www.programiz.com/python-programming/methods/built-in/format
Created: 2019-05-16