List of python tips
- Use the Python 3 print function in Python 2
- Reverse a string or list
- Reverse by custom step
- List slice assignment
- Copy a list
- Create a list out of string
- Print elements of a list by unpacking (only Python 3)
- Check file or directory exists
- Call an external command
- Capture output from an external command
- Ternary conditional operator
- else in for loop
- Switch case
- Print to file
- Writing to file
- Reading from file
- Iterating over lines in a file
- Accessing attributes which start with underscores
# For Python 2, using the print() function from Python 3 helps future compatibility.
# It also allows better syntax when printing to files, or changing the line ending.
from __future__ import print_function
print('Python', 'Tips', sep='-', end='')
import sys
print('There was an error!', file=sys.stderr)
with open(filename, 'w') as f:
print('Python!', file=f)
my_list = ['a','b','c','d','e']
reverse_list = my_list[::-1]
my_string = "python"
print(my_string[::-1])
# output : nohtyp
my_list = [1,2,3,4,5,6]
reverse_list = my_list[::-2]
print(reverse_list)
# output : [6,4,2]
my_list = ['a','b','c','d','e']
my_list[3:] = ['x','y','z']
print(my_list)
# output : ['a', 'b', 'c', 'x', 'y', 'z']
a = [1, 2, 3, 4]
''' Considered as one of the weirdest syntax to copy elements.'''
a_copy = a[:]
''' Another way of copying a list.'''
a_copy2 = list()
a_copy2.extend(a) # output a_copy2 = [1, 2, 3, 4]
data = "abcd"
data_list2 = list(data) # OutPut: data_list = ['a', 'b', 'c', 'd']
my_list = [1, 2, 3, 4]
print(*my_list, sep='\t') # Print elements of my_list separated by a tab
os.path.isfile
used only for files
import os.path
os.path.isfile(filename) # True if file exists
os.path.isfile(dirname) # False if directory exists
os.path.exists
used for both files and directories
import os.path
os.path.exists(filename) # True if file exists
os.path.exists(dirname) #True if directory exists
pathlib.Path
method (included in Python 3+, installable with pip for Python 2)
from pathlib import Path
Path(filename).exists()
from subprocess import call
call(['ls,'-l'])
from subprocess import check_output
output = check_output(['ls', '/usr/bin'])
You can also capture stderr
at the same time.
from subprocess import check_output, STDOUT, CalledProcessError
try:
output = check_output(['ls', '/nonexistent'], stderr=STDOUT)
except CalledProcessError:
print('Error: {}'.format(output.decode()))
else:
print('Success: {}'.format(output.decode()))
print('True' if True else 'False')
An else
block is executed if the loop body is not terminated by a break
statement :
for i in range(5):
print('Here we go!')
if i == 2:
break
else:
print('There we went.')
# output : Here we go!
# Here we go!
# Here we go!
This for
loop will get all the way to else
:
for i in range(5):
print('Here we go!')
if i == 10:
break
else:
print('There we went.')
# output : Here we go!
# Here we go!
# Here we go!
# Here we go!
# Here we go!
# There we went.
switcher = {
1: "January",
2: "February",
3: "March",
4: "April",
5: "May",
6: "June",
7: "July",
8: "August",
9: "September",
10: "October",
11: "November",
12: "December"
}
for i in range(1, 13):
print(switcher.get(i, "Invalid month"))
# Using `with` and `open`, the file will be closed when the `with` block finishes.
with open(filename, 'w') as outputfile:
print('Python!', file=outputfile)
with open(filename, 'a') as outputfile:
outputfile.write('Python!\n')
with open('file.txt', 'r') as inputfile:
data = inputfile.read()
When iterating over lines in a file, this method uses less memory because it reads one line at a time.
with open(filename, 'r') as inputfile:
for line in inputfile:
# Lines have a '\n' at the end, like inputfile.readlines().
print(line, end='')
“Private” instance variables that cannot be accessed except from inside an object don’t exist in Python. Since there is a valid use-case for class-private members (namely to avoid name clashes of names with names defined by subclasses), there is limited support for such a mechanism, called name mangling. Any identifier of the form __spam (at least two leading underscores, at most one trailing underscore) is textually replaced with _classname__spam, where classname is the current class name with leading underscore(s) stripped.
So to access attributes which start with underscores simply run obj_name._ClassName__attr_name .
class MyClass:
def __init__(self):
self.__private_attr = None
def set_private_attr(self, attr_to_private):
self.__private_attr = attr_to_private
attr = 7
my_class = MyClass()
my_class.set_private_attr(attr)
print(my_class._MyClass__private_attr)
python-tips is MIT licensed, as found in the LICENSE file.