Skip to main content

Count lines of files!

Project description

Line Count

A library that counts the lines within a file, directory, or directory tree.

It can be run through the command line, or functions can be imported to be used in your own Python projects.

Some benefits of linecount include:

  • See the number of source lines of code (SLOC), commented lines, and blank lines
  • Exclude files or directories whose names contain certain characters. This is useful for excluding files with certain file extensions, or certain directories like venv or .git.
  • Only include files whose names contain certain characters. This is useful for counting lines of files with certain file extensions.

You can view the PyPi page here

Installing

You can install the project from pypi:

$ pip install linecount

Command Line Usage

Help

You can get help on commands by performing:

$ linecount -h
$ linecount --help  # alternative way to write it

Counting Lines of a File

$ linecount file_to_count.txt

Counting Lines in a Directory

$ linecount . # count all files in this directory
$ linecount /path/to/dir  # or specify a directory this way

Recursive

You can also count the lines of all files within a directory and all of its subdirectories. This command may take a while if you are counting the lines of a lot of files.

$ linecount . -r  # count all files in this directory + all subdirectories, recursively
$ linecount /path/to/dir -r  # another way to specify the directory

Include Files

If you only want to count the lines of files containing a string in the filename, such as .py or hello, you can do:

$ linecount /path/to/dir -r --includefiles ".py,hello"
$ linecount /path/to/dir -r -if ".py,hello"  # alternative way to write it

This will only include files whose names contain .py or hello. For example, the below files will be included:

hello.py
hello.txt
a.hello
cache.pyc

Exclude Files

If you want to exclude files containing a certain string in their name, for example, .txt, we can do:

$ linecount /path/to/dir -r --excludefiles ".txt"
$ linecount /path/to/dir -r -ef ".txt"  # alternative way to write it

For example, this will exclude the following files:

myfile.txt
a.txt.py

Exclude Dirs

You can also exclude directories that have a specific string in their name. For example, if you want to exclude the venv directory:

$ linecount /path/to/dir -r --excludedirs "venv"
$ linecount /path/to/dir -r -ed "venv"  # alternative way to write it

Combining Include Files and Exclude Files

If you want to include files that have the string .py, but not .pyc, you can include .py and exclude .pyc:

$ linecount /path/to/dir -if ".py" -ef ".pyc"

Python Usage

Importing

You can import linecount by performing:

import linecount as lc

The LineStats Tuple

The LineStats tuple is a common return value from line counting functions. It is a named tuple with five variables:

  • filepath: the path to the file the object is describing
  • lines: the total number of lines in the file
  • souce_lines_of_code: the number of source lines of code (SLOC) in the file
  • commented_lines: the number of commented lines in the file
  • blank_lines: the number of empty lines in the file

Count the lines of a file

You can count the lines of a file with the lc.count_lines_file(filepath: str) function. It returns a LineStats named tuple.

line_stats: lc.LineStats = lc.count_lines_file("path/to/file.txt")

Counting the lines of a directory

The lc.count_lines_dir(dir_path: str) function counts the lines of all files within a directory. It takes one required argument, dir_path.

It returns a tuple of two values:

  • The first value is a LineStats object, and contains data on all the files in the directory summed up.
  • The second value is a list[LineStats], and contains one entry per file that was counted.

It also takes in two optional arguments:

  • exclude_files: list[str]: excludes any files with filenames containing any of the strings listed. For example, if exclude_files contains [".py", ".txt"], all files containing .py or .txt in their name will be excluded.
  • include_files: list[str]: only filenames that contain one or more of the strings in the list will be included.

Usage example:

summary_stats, specific_stats = lc.count_lines_dir("path/to/dir", exclude_files=[".pyc"], include_files=[".py"])

Counting lines of files within a directory recursively

To recursively count the number of lines of files within a directory, the lc.count_lines_dir_recursive(dir_path: str) function can be used. It takes one required argument, dir_path.

It returns a tuple of two values:

  • The first value is a LineStats object, and contains data on all the files in the directory and subdirectories summed up.
  • The second value is a list[LineStats] data structure, and contains one entry per file that was counted.

It contains three optional arguments:

  • exclude_files: list[str]: excludes any files with filenames containing any of the strings listed. For example, if exclude_files contains [".py", ".txt"], all files containing .py or .txt in their name will be excluded.
  • include_files: list[str]: only filenames that contain one or more of the strings in the list will be included.
  • exclude_dirs: list[str]: directory names that contain one or more of the strings in the list will be excluded.

Example usage:

summary_stats, specific_stats = lc.count_lines_dir_recursive("path/to/dir", exclude_files=[".pyc"], include_files=[".py"], exclude_dirs=["venv"])

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

linecount-1.1.3.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

linecount-1.1.3-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file linecount-1.1.3.tar.gz.

File metadata

  • Download URL: linecount-1.1.3.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for linecount-1.1.3.tar.gz
Algorithm Hash digest
SHA256 18b885437b40ea6b7837e693484e8c54c52752029f98add31f32e540b64ec632
MD5 d9f29e41a9f10471282c0233d590ae36
BLAKE2b-256 2802dc8f439122f808ac4b8a32fca5f387d66e5d736c5f20d3ec884d843954b0

See more details on using hashes here.

Provenance

File details

Details for the file linecount-1.1.3-py3-none-any.whl.

File metadata

  • Download URL: linecount-1.1.3-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for linecount-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7842942e2be0caf798a51ac553a96cafcc8841bd25b55f86931fc5345302c443
MD5 67eeb1c36e89680789a5ce4214944b1d
BLAKE2b-256 421709f1d7f47ba37388458020f85428be9db03c98c4863437c516e6ce058911

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page