making a valid file name...

Tim Chase python.list at
Tue Oct 17 19:14:10 CEST 2006

> Sometimes the user inputs characters that aren't valid 
> characters for a file or directory name. Here are the
> characters that I consider to be valid characters...
> valid =
> ':./,^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ '

Just a caveat, as colons and slashes can give grief on various 
operating systems...combined with periods, it may be possible to 
cause trouble too...

> This is what I have:
> def fixfilename(fname):
> 	valid =
> ':.\,^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ '
> 	for i in range(len(fname)):
> 		if valid.find(fname[i]) < 0:
> 			fname[i] = ' '
>        return fname
> Anyone think of a simpler solution?

I don't know if it's simpler, but you can use

 >>> fname = "this is a test & it ain't expen$"
 >>> ''.join(c in valid and c or ' ' for c in fname)
'this is a test   it ain t expen'

It does use the "it's almost a ternary operator, but not quite" 
method concurrently being discussed/lambasted in another thread. 
  Treat accordingly, with all that may entail.  Should be good in 
this case though.

If you're doing it on a time-critical basis, it might help to 
make "valid" a set, which should have O(1) membership testing, 
rather than using the "in" test with a string.  I don't know how 
well the find() method of a string performs in relationship to 
"in" testing of a set.  Test and see, if it's important.


More information about the Python-list mailing list