Я соглашаюсь с Grauenwolf и настоятельно рекомендовал бы Path.GetInvalidFileNameChars()
, Вот мой вклад C#:
string file = @"38?/.\}[+=n a882 a.a*/|n^%$ ad#(-))";
Array.ForEach(Path.GetInvalidFileNameChars(),
c => file = file.Replace(c.ToString(), String.Empty));
p.s. - это более загадочно, чем это должно быть - я пытался быть кратким.
Как отмечено в вопросе, Алекс Мартелли дает решение здесь . Эта функция позволяет нам использовать фабричную функцию для создания значения по умолчанию для каждого потока.
#Code originally posted by Alex Martelli
#Modified to use standard Python variable name conventions
import threading
threadlocal = threading.local()
def threadlocal_var(varname, factory, *args, **kwargs):
v = getattr(threadlocal, varname, None)
if v is None:
v = factory(*args, **kwargs)
setattr(threadlocal, varname, v)
return v
Может также писать
import threading
mydata = threading.local()
mydata.x = 1
mydata.x будет существовать только в текущем потоке