> 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$ive.py" >>> ''.join(c in valid and c or ' ' for c in fname) 'this is a test it ain t expen ive.py' 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. -tkc -- http://mail.python.org/mailman/listinfo/python-list