0

I have a lot of like abc_model1.pdb.1,...,abc_model1.pdb.100. I want to change these files as abc_model1_1.pdb , ...,abc_model1_100.pdb. I tried several unsuccessful attempts to modify codes as given in 'How do I rename the extension for a batch of files?'. How can I do using python?

Community
  • 1
  • 1
Mahendra Thapa
  • 163
  • 2
  • 4
  • 12
  • If you have the `rename` utility (the one from the `perl` package, _not_ the one from util-linux) installed, then all you need is the simple command: `rename 's/\.pdb\.(\d+)$/_$1.pdb/' *` – John1024 Jan 26 '15 at 04:54

1 Answers1

1

Try this:

import glob
import os
import shutil

file_dir = '/user/foo/bar/somewhere/'
dest_dir = file_dir # Change this to where you want
                    # the renamed files to go.

for file in glob.iglob(os.path.join(file_dir,'*.pdb.*')):
    filename_temp, number = os.path.splitext(os.path.basename(file))
    filename, ext = os.path.splitext(filename_temp)
    shutil.move(file, os.path.join(dest_dir,
                             '{}_{}{}'.format(filename,number,ext)))
Burhan Khalid
  • 169,990
  • 18
  • 245
  • 284
  • 1
    Looks like you've only got one argument in your call to `shutil.move` there. – jez Jan 26 '15 at 04:25
  • Yep, thanks for that - lack of coffee in the morning. – Burhan Khalid Jan 26 '15 at 04:26
  • Why `shutil.move` instead of `os.rename`? – augurar Jan 26 '15 at 04:35
  • It uses `os.rename` when required: _"If the destination is on the current filesystem, then os.rename() is used. Otherwise, src is copied (using shutil.copy2()) to dst and then removed."_ [docs](https://docs.python.org/2/library/shutil.html#shutil.move). – Burhan Khalid Jan 26 '15 at 04:37