Source code for pydl.file_lines
# Licensed under a 3-clause BSD style license - see LICENSE.rst
# -*- coding: utf-8 -*-
[docs]def file_lines(path, compress=False):
"""Replicates the IDL ``FILE_LINES()`` function.
Given a path to a file name or a list of such paths, returns the number of
lines in the file(s).
Parameters
----------
path : :class:`str` or :class:`list` of :class:`str`
Path to a file. Can be a list of paths.
compress : :class:`bool`, optional
If set to ``True``, assumes that all files in `path` are GZIP
compressed.
Returns
-------
:class:`int` or :class:`list` of :class:`int`
The number of lines in `path`. Returns a list of lengths if a list of
files is supplied.
Notes
-----
The ``/NOEXPAND_PATH`` option in IDL's ``FILE_LINES()`` is not implemented.
References
----------
http://www.harrisgeospatial.com/docs/file_lines.html
Examples
--------
>>> from pydl import file_lines
>>> from os.path import dirname, join
>>> file_lines(join(dirname(__file__),'tests','t','this-file-contains-42-lines.txt'))
42
"""
scalar = False
if isinstance(path, (str,)):
working_path = [path]
scalar = True
else:
working_path = path
lines = list()
for filename in working_path:
if compress:
#
# gzip in Python 2.6 can't use a context manager.
#
import gzip
f = gzip.open(filename)
lines.append(len(f.readlines()))
f.close()
else:
with open(filename) as f:
lines.append(len(f.readlines()))
if scalar:
return lines[0]
else:
return lines