Skip to main content

Rename image files according to exif tags

Project description

Travis-CI Build Status AppVeyor Build status

pyimgren

A python module to rename images according to their exif tags.

Current status

This package package is distributed in PyPI since version 0.1.0. It can be used by end users, but should be considered at beta quality because it still lacks extensive testing and documentation. Its full source is available from GitHUB.

Goals

Digital cameras name their pictures in a sequential manner. When you want to put pictures from several cameras in the same folder, they will be sorted by camera instead of by picture date and time.

Even if we can find here and there programs that allow for batch renaming of such pictures, I could not find a portable Python module for that. So the goals of this project are:

  • few dependencies: a Python 3 (tested for >= 3.3)
  • few additional module requirements: only piexif is required at installation time
  • portability: this is a pure Python package and is tested with Travis-CI (linux) and AppVeyor (Windows) for versions 3.3 to 3.6 (3.7 for AppVeyor only).

Usage:

As a Python module

The pyimgren package contains one single class Renamer with two public methods: rename to rename picture files according to their exif date, and back to rename them back to their original names.

A Renamer is used to rename image names provided by a camera (commonly IMGxxxxx.JPG or DSCFyyyy.JPG into a name based on the time when the photography had been taken (as smartphones do). That time is extracted from the exif tag of the picture. No rename occurs if the picture contains no exif time..

A file named names.log is created in the folder to store the new names and the original ones, in order to be able to rename them back.

You create a Renamer with:

renamer = Renamer(folder, src_mask = "DSCF*.jpg",
                dst_mask = "%Y%m%d_%H%M%S",
                ext_mask = ".jpg",
                ref_file = "names.log",
                debug = False,
                dummy = False)

Parameters:

  • folder: the default folder where pictures will be renamed
  • src_mask: a pattern to select the files to be renamed (default "DSCF*.jpg")
  • dst_mask: a format containing strftime formatting directives, that will be used for the new name of a picture (default "%Y%m%d_%H%M%S")
  • ext_mask: the extension of the new name (default ".jpg")
  • ref_file: the name of a file that will remember the old names (default "names.log")
  • debug : a boolean flag that will cause a line to be printed for each rename when true (default False)
  • dummy : a boolean flag that will cause a "dry run", meaning that the folder will be scanned, and debug info eventually printed but no file will be renamed (default False)

Typical use:

from pyimgren import Renamer
...
conv = Renamer(path)
conv.rename()    # to convert to "date" names
...
conv.back()      # if you want to revert to original names

As a script

The pip installation install a pyimgren script (pyimgren.exe on Windows) in the Scripts directory. It can then be directly used (provided the Script directory be in the path) with the following syntax:

usage: pyimgren [-h] [-v] [-b] [-s SRC_MASK] [-d DST_MASK] [-e EXT_MASK]
                [-r REF_FILE] [-D] [-X]
                folder

Rename pictures according to their exif timestamp

positional arguments:
  folder                folder containing files to rename

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -b, --back            restore original names
  -s SRC_MASK, --src_mask SRC_MASK
                        pattern to select the files to rename
  -d DST_MASK, --dst_mask DST_MASK
                        format for the new file name
  -e EXT_MASK, --ext EXT_MASK
                        extension for the new file name
  -r REF_FILE, --ref_file REF_FILE
                        a file to remember the old names
  -D, --debug           print a line per rename
  -X, --dry_run         process normally except no rename occurs

As a module

It can be use as a Python module, which allows to use it in Windows even if the Scripts directory is not in the path thanks to the py launcher with same syntax as the script:

usage: python -m pyimgren [-h] [-v] [-b] [-s SRC_MASK] [-d DST_MASK]
                [-e EXT_MASK] [-r REF_FILE] [-D] [-X]
                folder

or when using the Windows launcher py -m pyimgren ...

Installing

End user installation

With pip: pip install pyimgren.

Developper installation

If you want to contribute or integrate pyimgren in your own code, you should get a copy of the full tree from GitHUB:

git clone https://github.com/s-ball/pyimgren [your_working_copy_folder]

Running the tests

As the project intends to be PyPI compatible, you can simply run tests from the main folder with:

python setup.py test

Contributing

As this project is developped on my free time, I cannot guarantee very fast feedbacks. Anyway, I shall be glad to receive issues or pull requests on GitHUB.

Versioning

This project uses a standard Major.Minor.Patch versioning pattern. Inside a major version, public API stability is expected (at least after 1.0.0 version will be published).

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

  • The hard job of exif data processing was already done in piexif

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

pyimgren-0.2.1.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyimgren-0.2.1-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file pyimgren-0.2.1.tar.gz.

File metadata

  • Download URL: pyimgren-0.2.1.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

File hashes

Hashes for pyimgren-0.2.1.tar.gz
Algorithm Hash digest
SHA256 8f094a6037142a781a69e676ccd488e823b9081d50a0eacfa6e26bc11c829747
MD5 1a68e311e5dbc24db97a52a5514e4d13
BLAKE2b-256 aab3f079f9bf9aa32032ce1af8a1770a268e27b30bafc4d6140b66a46e9f4021

See more details on using hashes here.

File details

Details for the file pyimgren-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: pyimgren-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

File hashes

Hashes for pyimgren-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 35ad95fa97661c6d673dcbebb9bb00e784af007f291f9f1df91c53fe0e41c221
MD5 dab77434c77f8c33a74d97b26ccfb107
BLAKE2b-256 38231ec9e5b988f56e55d8b4336bf643c1772b16a92bd8992cd4799b9ed64e00

See more details on using hashes here.

Supported by

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