程序应该如何生成唯一的文件系统路径并且不创建 文件系统条目?
tempfile.mktemp
函数是 strongly deprecated ,这是正确的,因为它使程序容易受到不安全文件创建的影响。
在某些代码(例如单元测试)中,我调用 tempfile.mktemp
来
为我不希望的文件系统条目生成唯一路径
存在于真实文件系统上。在这种情况下,文件系统安全性
担心是无关紧要的,因为没有文件。
该函数的弃用仍然是一个问题,因为我不 希望代码能够让每个认真的读者都需要决定是否 代码有问题。相反,代码应该避免正确弃用 API。
API 函数也很容易在某个时刻消失。 future ,因为它已被明确且强烈地弃用。
tempfile 提供的其他函数根本不需要避免接触文件系统,而只是为了获得唯一的路径。
因此,我总体上同意弃用 tempfile.mktemp
,但该库似乎并未为此目的提供替代品。
我应该使用什么标准库函数来生成 tempfile.mktemp 类似唯一路径,并且不会创建真实文件 沿着那条路?
最佳答案
据我所知,没有这样的标准函数,它会生成唯一的名称,但不会创建文件。 看一下“mktemp”函数的内部实现并创建您自己的......
以下是您可能感兴趣的代码:
class _RandomNameSequence:
"""An instance of _RandomNameSequence generates an endless
sequence of unpredictable strings which can safely be incorporated
into file names. Each string is six characters long. Multiple
threads can safely use the same instance at the same time.
_RandomNameSequence is an iterator."""
characters = "abcdefghijklmnopqrstuvwxyz0123456789_"
@property
def rng(self):
cur_pid = _os.getpid()
if cur_pid != getattr(self, '_rng_pid', None):
self._rng = _Random()
self._rng_pid = cur_pid
return self._rng
def __iter__(self):
return self
def __next__(self):
c = self.characters
choose = self.rng.choice
letters = [choose(c) for dummy in range(8)]
return ''.join(letters)
关于python - 创建一个唯一的文件系统路径,没有任何实际文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35398311/