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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7fbab08c12ec90846356880bbda1b16064aaf278a290542ee6a782284c5cd729 |
|
MD5 | 18f19916cb520cd602e321ef2e77d418 |
|
BLAKE2b-256 | 44708ae95a43c7030865b8b883060c37db9ffab5838bf3132879a1ec1efd556b |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | f80975c53b7c811e9d09695e51b44f0e72c21545b8d2be74f65a57ca2056a66e |
|
MD5 | 4972297802926592cc6ded6ec9fd146a |
|
BLAKE2b-256 | bfe800aafb6b568ed1487b5d9d80fea3111aebc577a972d712fd70f7ff1e0e75 |