There are some gems in the Python standard library which, once found, get regular use – at least by me. Here are some of them.
1. enumerate
A built-in function, which allows you to replace code like this:
day_list = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
for day_index in range(len(day_list)):
day_name = day_list[day_index]
print(day_index, day_name)
with the more succinct:
day_list = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
for day_index, day_name in enumerate(day_list):
print(day_index, day_name)
2. gzip.GzipFile
I used this whilst processing Apache log files last week. It offers compression to less than 10% of the original uncompressed size, but seems to take the same length of time to read/write, implying a good trade-off between processor use and hard-disk activity. Having changed the open code from
fh = open(<logfile>, "r")
to:
import gzip ... fh = gzip.GzipFile(<logfile>, "r")
the rest of the code runs unchanged.
Note: if you are running on Linux, then the issue of speed, documented at http://bugs.python.org/issue7471, is relevant, and the zcat approach is faster.
3. collections.defaultdict
This provides a dictionary, which initialises a key on first read using a method.
For instance:
import collections ... zerodict = collections.defaultdict(int) print(zerodict["key"], zerodict[4])
produces:
0 0