confusion regarding os.path.walk()
killspam at darwinwars.com
Tue Feb 19 11:00:26 CET 2002
Steven Majewski <sdm7g at Virginia.EDU> wrote in
news:mailman.1014078032.30409.python-list at python.org:
> You need to os.path.join() the dirname to the filename and do your
> test on that. The filenames are relative to the directory arg,
> not to the process current directory.
I had a similar problem yesterday: I wanted to rename all the files on my
site consistently (no spaces, no uppercase, all to end .html) and then --
so as not to break search engines -- to symlink the new names to the old
names. This will let me slowly fade out the old names.
Part 1 went fine, and left me with a text file recording the changes,
which could then be reconstructed as a dictionary of file==>symlink
needed pairs. But when I came to do the second part, with os.path.walk, I
found that all the calls to make symlinks produced broken links with or
without os.path.join(). I had to put into the visitor function a call to
os.chdir(os.curdir) and then make the symlink with os.system
(linkcommand). ("linkcommand" was a previously constructed string like
'ln-s newname oldname')
I found later that I could have used os.symlink() instead of the call to
os.system() but I'm still puzzled that you can't apparently create
symlinks in a directory that's a subdirectory relative to where you are.
Is this a unix/linux feature or a python one?
The practical question I was left with was "how do you identify broken
symlinks with python?" I'd have liked a script that rm-ed broken and only
broken symlinks, and I can't figure out how to test for them.
os.path.islink(file) will tell me whether it's a symlink. But is there a
call to say what it's supposed to point at? Then I can test whether that
More information about the Python-list