Python glob and raw string
Xaxa Urtiz
urtizvereaxaxa at gmail.com
Fri Jan 17 11:45:25 EST 2014
Le jeudi 16 janvier 2014 19:14:30 UTC+1, Neil Cerutti a écrit :
> On 2014-01-16, Xaxa Urtiz <> wrote:
>
> > Hello everybody, i've got a little problem, i've made a script
>
> > which look after some files in some directory, typically my
>
> > folder are organized like this :
>
> >
>
> > [share]
>
> > folder1
>
> > ->20131201
>
> > -->file1.xml
>
> > -->file2.txt
>
> > ->20131202
>
> > -->file9696009.tmp
>
> > -->file421378932.xml
>
> > etc....
>
> > so basically in the share i've got some folder
>
> > (=folder1,folder2.....) and inside these folder i've got these
>
> > folder whose name is the date (20131201,20131202,20131203
>
> > etc...) and inside them i want to find all the xml files.
>
> > So, what i've done is to iterate over all the folder1/2/3 that
>
> > i want and look, for each one, the xml file with that:
>
> >
>
> > for f in glob.glob(dir +r"\20140115\*.xml"):
>
> > ->yield f
>
> >
>
> > dir is the folder1/2/3 everything is ok but i want to do
>
> > something like that :
>
> >
>
> > for i in range(10,16):
>
> > ->for f in glob.glob(dir +r"\201401{0}\*.xml".format(i)):
>
> > -->yield f
>
> >
>
> > but the glob does not find any file.... (and of course there is
>
> > some xml and the old way found them...)
>
> > Any help would be appreciate :)
>
>
>
> I've done this two different ways. The simple way is very similar
>
> to what you are now doing. It sucks because I have to manually
>
> maintain the list of subdirectories to traverse every time I
>
> create a new subdir.
>
>
>
> Here's the other way, using glob and isdir from os.path, adapted
>
> from actual production code.
>
>
>
> class Miner:
>
> def __init__(self, archive):
>
> # setup goes here; prepare to acquire the data
>
> self.descend(os.path.join(archive, '*'))
>
>
>
> def descend(self, path):
>
> for fname in glob.glob(os.path.join(path, '*')):
>
> if os.path.isdir(fname):
>
> self.descend(fname)
>
> else:
>
> self.process(fname)
>
>
>
> def process(self, path):
>
> # Do what I want done with an actual file path.
>
> # This is where I add to the data.
>
>
>
> In your case you might not want to process unless the path also
>
> looks like an xml file.
>
>
>
> mine = Miner('myxmldir')
>
>
>
> Hmmm... I might be doing too much in __init__. ;)
>
>
>
> --
>
> Neil Cerutti
i only have 1 level of subdirectory, it's just in the case when i don't want to process all the date (otherwise i make a glob on '/*/*', no need to do any recursion.
thanks for the answer !
More information about the Python-list
mailing list