Hi guys
I am new to python ..
i was trying to move sequential images from a folder with multiple types of sequences in same folder like
to different folders

import os, glob, os.path
import array
path = 'd:\del'

for file in glob.glob( os.path.join(path, '*.jpg') ):
  (dirName, fileName) = os.path.split(file)
  (fileBaseName, fileExtension)=os.path.splitext(fileName)
  print fileBaseName

i can't put them into array and break the loop in between different sequence.

Thanks in advance.

Recommended Answers

All 5 Replies

import os, glob
path = 'd:\del'

for my_file in glob.glob( os.path.join(path, '*.jpg') ):
  (dirName, fileName) = os.path.split(my_file)
  (fileBaseName, fileExtension) = os.path.splitext(fileName)
  print fileBaseName

Are you getting errors? You don't need to import os.path, as you can simply use os.path after importing os...

Also, you aren't using the array module so I removed that as well.

Another thing: file is a reserved word in Python so I would suggest that you avoid using it as a variable name.

Finally: Paths in Windows are tricky because '\' is an escape character in Python... so a path such as 'C:\My Documents\Music' should be written as either 'C:\\My Documents\\Music' or r'C:\My Documents\Music' (which is raw string format)

Thanks for your reply
well i am not getting error..right now ,
I am stuck with going further, i got the list of all file in the folder,
but how do i break loop where a particular sequence is finished..
and create another loop with new sequence in the folder.
can you guide me how to go about it..


One way to split a path_list into two at selected filenames ...

import os

# let's assume your path list looks like this ...
path_list = ['d:\\del\\a_bc_01.jpg',
'd:\\del\\a_bc_02.jpg', 'd:\\del\\a_bc_03.jpg',
'd:\\del\\c_de_05.jpg', 'd:\\del\\c_de_06.jpg']

# create two empty path lists
path_list1 = []
path_list2 = []
for path in path_list:
    fname = os.path.basename(path)
    #print fname  # test
    # select the filenames to be in each path list
    if fname.startswith('a_bc'):
    elif fname.startswith('c_de'):


my result -->
['d:\\del\\a_bc_01.jpg', 'd:\\del\\a_bc_02.jpg', 'd:\\del\\a_bc_03.jpg']
['d:\\del\\c_de_05.jpg', 'd:\\del\\c_de_06.jpg']

Now you can iterate these separated lists and put them into different folders or whatever.

Thanks a lot for your input
is there any way to break the sequence by there number as sometime the filename is same like :
how can i break list in this case .
thanks again for your time and effort.

You can write a function to split the list according to an arbitrary criterion

def cut_list(thelist, criterion):
    """ cut_list(list, function) -> list of lists
    splits a list into sublists according to a given criterion.
    Here a criterion is a function of 2 arguments
        func(item1, item2) -> True if the list must be cut between 2 items else False
    if not thelist;
        return []
    result = [[thelist[0]]]
    for i, item in enumerate(thelist[1:]):
        previous = thelist[i-1]
        if criterion(previous, item):
    return result

Next we must write a criterion function for the cut. First write a function to split your image names into prefix and number

import re
pattern = re.compile(r"(\d+)\.jpg")
def split_name(name):
    """split_name(name) -> a pair of strings (prefix, num)
    for exemple split_name("a_bc127.jpg") -> ("a_bc", "127")"""
    match = pattern.search(name)
    return (name[:match.start()], match.group(1))

Then we write a criterion function to cut our list

def cut_rule(name1, name2):
    prefix1, num1 = split_name(name1)
    prefix2, num2 = split_name(name2)
    return prefix1 != prefix2 # return True if the 2 prefixes are different

You can modify the cut rule as you wish. Now, assuming you have a list thenames of the files' basenames, you can call

pieces = cut_list(thenames, cut_rule)

to obtain a list of lists.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, learning, and sharing knowledge.