Move all Files from Subfolders to Main Folder
SPSS tutorials website header logo SPSS TUTORIALS VIDEO COURSE BASICS ANOVA REGRESSION FACTOR

Move all Files from Subfolders to Main Folder

Question

"I'd like to work with a number of .sav files but they are scattered over different folders. All file names are unique. Is there any easy way to search through a number of folders for .sav files and move these into some root directory?"

SPSS Python Syntax Example

*1. Create random test folders and files.

begin program.
rdir = 'd:/temp' # Specify (empty) test folder.
import spss
for cnt,sdir in enumerate(['','f1','f2','f1/f1_1','f1/f1_2','f1/f1_2/f1_2_1']):
    tdir = os.path.join(rdir,sdir)
    if not os.path.exists(tdir):
        os.mkdir(tdir)
    spss.Submit('data list free/id.\nbegin data\n1\nend data.\nsav out "%s".'%(tdir + '/file_' + str(cnt) + '.sav'))
spss.Submit('new fil.')
end program.

*2. Move all .sav files from subfolders into root directory.

begin program.
rdir = 'd:/temp' # Specify root directory to be searched for .sav files.
filelist = []
for tree,fol,fils in os.walk(rdir):
    filelist.extend([os.path.join(tree,fil) for fil in fils if fil.endswith('.sav')])
for fil in filelist:
    os.rename(fil,os.path.join(rdir,fil[fil.rfind('\\') + 1:]))
end program.

Description

What if File Names aren't Unique?

"I can't simply move all files into a single folder because their file names are not unique. I can't have two files with identical names in a single folder. In order to solve this, I'd like to assign unique prefixes to all filenames. How can I do that?"

SPSS Python Syntax Example

begin program.
rdir = 'd:/temp' #Please specify root directory to be searched for .sav files.
filelist = []
for tree,fol,fils in os.walk(rdir):
    filelist.extend([os.path.join(tree,fil) for fil in fils if fil.endswith('.sav')])
for cnt,fil in enumerate(filelist):
    os.rename(fil,os.path.join(rdir,str(cnt + 1).zfill(2) + '_' + fil[fil.rfind('\\') + 1:]))
end program.

Delete Everything in Root Directory Except Data Files

"The .sav files were the only thing I needed from the root directory. Is there an easy way to delete everything else?"

SPSS Python Syntax Example

*1. Optionally: delete everything in root directory except .sav files.

begin program.
rdir = 'd:/temp' # Specify root directory.
import shutil
for tree in [path for path in os.listdir(rdir) if not path.endswith('.sav')]:
    try:
        shutil.rmtree(os.path.join(rdir,tree))
    except:
        os.remove(os.path.join(rdir,tree))
end program.

Tell us what you think!

*Required field. Your comment will show up after approval from a moderator.