[Tutor] renaming files within a directory
davidwilson at Safe-mail.net
davidwilson at Safe-mail.net
Mon Jul 27 11:10:49 CEST 2009
Here is what I have so far:
import os
import csv
countries = {}
reader = csv.reader(open("countries.csv"))
for row in reader:
code, name = row
countries[name] = code
files = set([file for file in os.listdir(os.getcwd()) if file.endswith('svg')])
print len(files)
for file in files:
file = file.strip('.svg')
print file
# if countries.has_key(file):
# print file
When I run this I get:
Flag_of_Uganda
Flag_of_the_United_State
Flag_of_Abkhazia
Flag_of_Montenegro
Flag_of_Qatar
Flag_of_Gabon
Flag_of_Uzbekistan
Flag_of_Kiribati
Flag_of_Armenia
Flag_of_Panama
Flag_of_Monaco
Flag_of_Australia
Flag_of_Liechtenstein
Flag_of_Tunisia
Flag_of_Georgia
Flag_of_Palau
Flag_of_the_Central_African_Republic
...
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 guess after this I can compare the value with the key and map the tld?
Or is it better to use regex and then search from the list of countries? But how???
-------- Original Message --------
From: Tim Golden <mail at timgolden.me.uk>
Apparently from: tutor-bounces+davidwilson=safe-mail.net at python.org
To:
Cc: tutor at python.org
Subject: Re: [Tutor] renaming files within a directory
Date: Sun, 26 Jul 2009 20:41:10 +0100
> davidwilson at Safe-mail.net wrote:
> > OK I am lost ;(
> >
> > I changed the code to:
> >
> >>>> reader = csv.reader(open("countries.csv"), delimiter=";")
> >>>> for row in reader:
> > ... print row
> > ...
> > ['bi', 'Burundi']
> > ['km', 'Comoros']
> > ['dj', 'Djibouti']
> > ['er', 'Eritrea']
> >
> > ...
> >
> > Now each row is a list with two items each.
> >
> > But when I do this:
> >
> >>>> dic = []
> >>>> for row in reader:
> > ... newdic.append({row[0]: row[1]})
> > ...
> >>>> dic
> > []
> >
> > I get an empty dictionary
>
> Well, you actually get an empty list :)
> To instantiate an empty dictionary, you use curly brackets:
>
> d = {}
>
> To add something to a dictionary, you use:
>
> d[<key>] = <value>
>
> Try something like this:
>
> <code - untested>
> import csv
>
> reader = csv.reader(open("countries.csv"), delimiter=";")
> countries = {} # note the curly brackets
> for row in reader:
> code, name = row # handy Python tuple unpacking
> countries[name] = code
>
> </code>
>
>
> Once you're used to the idea, you can get reasonably slick
> with dictionary initialisers and generator expressions:
>
> import csv
>
> reader = csv.reader(open("countries.csv"), delimiter=";")
> countries = dict ((row[1], row[0]) for row in reader)
>
> And once you're really confident (and if you're a
> fan of one-liners) you can get away with this:
>
> import csv
> countries = dict (
> (name, code) for \
> (code, name) in \
> csv.reader (open ("countries.csv"), delimiter=";")
> )
>
>
> BTW, I tend to open csv files with "rb" as it seems to
> avoid line-ending issues with the csv module. YMMV.
>
> TJG
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
More information about the Tutor
mailing list