Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to list an image sequence in an efficient way? Numercial sequence comparison in Python
    text
    copied!<p>I have a directory of 9 images:</p> <pre> image_0001, image_0002, image_0003 image_0010, image_0011 image_0011-1, image_0011-2, image_0011-3 image_9999 </pre> <p>I would like to be able to list them in an efficient way, like this (4 entries for 9 images):</p> <pre> (image_000[1-3], image_00[10-11], image_0011-[1-3], image_9999) </pre> <p>Is there a way in python, to return a directory of images, in a short/clear way (without listing every file)?</p> <p>So, possibly something like this:</p> <p>list all images, sort numerically, create a list (counting each image in sequence from start). When an image is missing (create a new list), continue until original file list is finished. Now I should just have some lists that contain non broken sequences.</p> <p>I'm trying to make it easy to read/describe a list of numbers. If I had a sequence of 1000 consecutive files It could be clearly listed as file[0001-1000] rather than file['0001','0002','0003' etc...]</p> <p><strong>Edit1</strong>(based on suggestion): Given a flattened list, how would you derive the glob patterns?</p> <p><strong>Edit2</strong> I'm trying to break the problem down into smaller pieces. Here is an example of part of the solution: data1 works, data2 returns 0010 as 64, data3 (the realworld data) doesn't work:</p> <pre><code># Find runs of consecutive numbers using groupby. The key to the solution # is differencing with a range so that consecutive numbers all appear in # same group. from operator import itemgetter from itertools import * data1=[01,02,03,10,11,100,9999] data2=[0001,0002,0003,0010,0011,0100,9999] data3=['image_0001','image_0002','image_0003','image_0010','image_0011','image_0011-2','image_0011-3','image_0100','image_9999'] list1 = [] for k, g in groupby(enumerate(data1), lambda (i,x):i-x): list1.append(map(itemgetter(1), g)) print 'data1' print list1 list2 = [] for k, g in groupby(enumerate(data2), lambda (i,x):i-x): list2.append(map(itemgetter(1), g)) print '\ndata2' print list2 </code></pre> <p>returns:</p> <pre><code>data1 [[1, 2, 3], [10, 11], [100], [9999]] data2 [[1, 2, 3], [8, 9], [64], [9999]] </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload