python - 创建一个唯一的文件系统路径,没有任何实际文件

标签 python temporary-files deprecation-warning

程序应该如何生成唯一的文件系统路径并且创建 文件系统条目?

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/

相关文章:

Python Pandas - 将日期列读取为字符串

python - 米特代理 : does one have to set proxy server to local?

python - 为什么 tempfile.SpooledTemporaryFile 不实现可读、可写、可查找?

python - 如何使用 "with"调用 tempfile.mkstemp() ? - 或者为什么它不返回带有 __exit__() 的 fd?

python - 使用python捕获异常时如何引发DeprecationWarning?

ios - 调度异步的 Swift 3 警告

Django 中的 Python 日志记录

django - 如何在 django 中将图像添加到帖子中

MySQL 8 - 表达式中的用户变量已被弃用(复杂计算)

python - 使用 python 的数字到字母数字编码器(排列和正则表达式)