Skip to main content

Matching and parsing file names like IMG_####.JPG or IMG_%04d.JPG

Project description

framefile

Python library for parsing and matching file name patterns like IMG_####.JPG or IMG_%04d.JPG.


Such files are often created by cameras and video production software. As a rule, this is a set of images with consecutive numbers, like IMG_0001.JPG, IMG_0002.JPG, IMG_0003.JPG and so on.

To handle files such as video sequences, Blender and AE use patterns like IMG_####.JPG. ffmpeg uses patterns like IMG_%04d.JPG.

This package can create and parse patterns in both formats.

Install

pip3 install framefile
other options

Install pre-release from GitHub:

pip3 install git+https://github.com/rtmigo/framefile_py@staging#egg=framefile

Use

Guess pattern from file name

from framefile import filename_to_pattern, Format

print(filename_to_pattern(Format.hash, "IMG_4567.JPG"))  # IMG_####.JPG
print(filename_to_pattern(Format.percent, "IMG_4567.JPG"))  # IMG_%04d.JPG

Any names with numbers in them are supported. The path can also be part of the file name.

from framefile import filename_to_pattern, Format

print(filename_to_pattern(Format.hash, "/video/frame-01234.png"))

# /video/frame-#####.png

If there are several number sequences in the file name, only the last of them will be considered a pattern. And only if its length is more than one digit.

from framefile import filename_to_pattern, Format

print(filename_to_pattern(Format.hash, "/video/take505_frame01234.cr2"))

# /video/take505_frame#####.cr2

Guess pattern from directory path

The directory_to_pattern function returns the most common file name pattern found in particular directory.

from pathlib import Path
from framefile import directory_to_pattern, Format

print(directory_to_pattern(Format.hash, Path("/path/to/my_timelapse")))

# /path/to/my_timelapse/img####.jpg

print(directory_to_pattern(Format.percent, Path("/path/to/my_timelapse")))

# /path/to/my_timelapse/img%04d.jpg

Find files by pattern

import glob
import framefile

# print all files matching /path/to/img####.jpg
file_mask = framefile.hash_pattern_to_glob('/path/to/img####.jpg')
print(glob.glob(file_mask))

# print all files matching /path/to/img%04d.jpg
file_mask = framefile.pct_pattern_to_glob('/path/to/img%04d.jpg')
print(glob.glob(file_mask))

Match file names as strings

import re
import framefile

regex = framefile.hash_pattern_to_regex('img####.jpg')
# or framefile.pct_pattern_to_regex('img%04d.jpg')

a = re.match(regex, 'img0023.jpg')
print(a.group(0))  # img0023.jpg
print(a.group(1))  # 0023

b = re.match(regex, 'anything.txt')
print(b)  # None

Extract number from file name

import framefile

x: int = framefile.hash_extract_number("img####.jpg", "img0023.jpg")
print(x)  # 23

y: int = framefile.pct_extract_number("img%04d.jpg", "img0023.jpg")
print(y)  # 23

If the name does not match the pattern, both functions throw the same PatternMismatchError.

import framefile

try:
    z = framefile.hash_extract_number("img####.jpg", "thumbs.db")
except framefile.PatternMismatchError:
    print("Oops!")

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

framefile-0.0.9.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

framefile-0.0.9-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file framefile-0.0.9.tar.gz.

File metadata

  • Download URL: framefile-0.0.9.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for framefile-0.0.9.tar.gz
Algorithm Hash digest
SHA256 7fbab08c12ec90846356880bbda1b16064aaf278a290542ee6a782284c5cd729
MD5 18f19916cb520cd602e321ef2e77d418
BLAKE2b-256 44708ae95a43c7030865b8b883060c37db9ffab5838bf3132879a1ec1efd556b

See more details on using hashes here.

File details

Details for the file framefile-0.0.9-py3-none-any.whl.

File metadata

  • Download URL: framefile-0.0.9-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for framefile-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 f80975c53b7c811e9d09695e51b44f0e72c21545b8d2be74f65a57ca2056a66e
MD5 4972297802926592cc6ded6ec9fd146a
BLAKE2b-256 bfe800aafb6b568ed1487b5d9d80fea3111aebc577a972d712fd70f7ff1e0e75

See more details on using hashes here.

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