coping directories

Gigs_ gigs at hi.t-com.hr
Fri Feb 2 11:10:11 EST 2007


Jussi Salmela wrote:
> Gigs_ kirjoitti:
>> hi people
>>
>> I have problem with this example, not actually the problem, but
>> [code]
>> class FileVisitor(object):
>>     def __init__(self, data=None):
>>         self.context = data
>>     def run(self, startdir=os.curdir):
>>         os.path.walk(startdir, self.visitor, None)
>>     def visitor(self, data, dirname, filesindir):
>>         self.visitdir(dirname)
>>         for fname in filesindir:
>>             fpath = os.path.join(dirname, fname)
>>             if not os.path.isdir(fpath):
>>                 self.visitfile(fpath)
>>     def visitdir(self, dirpath):            # override or extend this 
>> method
>>         print dirpath, '...'
>>     def visitfile(self, filepath):          # override or extend this 
>> method
>>         print self.fcount, '=>', filepath
>> #
>> class CVisitor(FileVisitor):
>>     def __init__(self, fromdir, todir):
>>         self.fromdirLen = len(fromdir) + 1        # here is my problem
>>         self.todir = todir
>>         FileVisitor.__init__(self, fromdir)
>>     def visitdir(self, dirpath):
>>         topath = os.path.join(self.todir, dirpath[self.fromdirLen:])
>>         os.mkdir(topath)
>>     def visitfile(self, filepath):
>>         topath = os.path.join(self.todir, filepath[self.fromdirLen:])
>>         cpfile(filepath, topath)    #copy contents from filepath to 
>> topath[/code]
>>
>>
>> When I copy contents from C:\IronPython to C:\temp
>> its all goes fine when self.fromdirLen = len(fromdir) + 1 is like this 
>> self.fromdirLen = len(fromdir) + 1
>> but when I change self.fromdirLen = len(fromdir) + 1 to 
>> self.fromdirLen = len(fromdir) i get contents copied to C:\ (actually 
>> to parent dir)
>>
>> Can anyone explain me that?
>>
>> Thanks!!!
>>  :o
> 
> Why do you want to change a working program anyway? :)
> 
> The result of your change is that os.path.join does the join 
> differently. Before the change the join is, for example:
>     os.path.join(r'c:\temp', r'AUTOEXEC.BAT')
> with a result:
>     c:\temp\AUTOEXEC.BAT
> 
> After your change the join is:
>     os.path.join(r'c:\temp', r'\AUTOEXEC.BAT')
> with a result:
>     \AUTOEXEC.BAT
> 
> This is described in the doc:
> 
>  join( path1[, path2[, ...]])
> 
> Join one or more path components intelligently. If any component is an 
> absolute path, all previous components (on Windows, including the 
> previous drive letter, if there was one) are thrown away, and joining 
> continues.
> 
> HTH,
> Jussi

thats what i need to know
Thanks



More information about the Python-list mailing list