[email protected] wrote:
Here is the updated viersion:

---

import glob
import csv
from os import rename


countries =}
reader =sv.reader(open("countries.csv"))
for row in reader:
    code, name =ow
    countries[name] =ode

files =et([file for file in glob.glob('Flag_of_*.svg')])

for file in files:
    file =ile[8:-4]
    if file.startswith('the_'):
        file =ile[4:]
    if countries.has_key(file):
        b =flag-'+ countries[file] + '.svg'
        print b
        rename(file, b)

But I cannot get the rename to take effect and I get an error:

$ python rename_svg.py Uganda flag-ug.svg
Traceback (most recent call last):
  File "rename_svg.py", line 21, in <module>
    rename(file, b)
OSError: [Errno 2] No such file or directory

What am I missing?

-------- Original Message --------
From: Kent Johnson <[email protected]>
Apparently from: [email protected]
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: [Tutor] renaming files within a directory
Date: Mon, 27 Jul 2009 07:01:32 -0400

On Mon, Jul 27, 2009 at 5:10 AM, <[email protected]> wrote:

files =et([file for file in os.listdir(os.getcwd()) if file.endswith('svg')])
print len(files)

for file in files:
   file =ile.strip('.svg')
   print file
#    if countries.has_key(file):
#       print file

When I run this I get:

Flag_of_Uganda
...

The problem is that for example the file Flag_of_the_United_States.svg when I 
use the strip('.svg') it is returned as Flag_of_the_United_State

Also, How do I remove 'Flag_of', 'Flag_of_the_'
I suggest you use glob.glob() instead of os.listdir():

files =lob.glob('Flag_of_*.svg)

Then you know that each file name starts with Flag_of_ and ends with
.svg. To remove them, since they are fixed strings you can just use
slicing;
file =ile[8:-4]
if file.startswith('the_'):
  file =ile[4:]

Kent

(Please don't top-post on this mailing list.  It hopelessly confuses which 
order the quoted messages come.)

One reason the rename() will fail is that you're changing file between the for loop and the rename. Incidentally, file is a lousy name to use, since it already has a meaning in the std lib. It's the type of the object you get from open(), or from glob.glog().


I didn't check the rest, but for this change, you'd get:

for infile in files:
   country = infile[8:-4]
   if country.startswith('the_'):
        country = country[4:]
   if countries.has_key(file):
        b = 'flag-'+ countries[country] + '.svg'
        print b
        rename(file, b)


BTW, several other characters were dropped in your email. Did you retype the code (bad), or use cut/paste?

DaveA

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to