zoukankan      html  css  js  c++  java
  • python tempfile 创建临时目录

    一、tempfile介绍

    该模块创建临时文件和目录。它适用于所有支持的平台。TemporaryFileNamedTemporaryFileTemporaryDirectory,和SpooledTemporaryFile是高级接口,其提供自动清理和可被用作上下文管理器。mkstemp()并且 mkdtemp()是需要手动清理的低级功能。

    所有用户可调用的函数和构造函数都采用其他参数,这些参数允许直接控制临时文件和目录的位置和名称。此模块使用的文件名包括一串随机字符,允许在共享临时目录中安全地创建这些文件。为了保持向后兼容性,参数顺序有些奇怪; 为清晰起见,建议使用关键字参数。

    二、创建临时文件

    1、TemporaryFile

    该模块定义以下用户可调用项:

    tempfile.TemporaryFile(mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None 

    返回一个类似文件的对象,可以用作临时存储区域。使用与之相同的规则安全地创建文件mkstemp()它将在关闭后立即销毁(包括在对象被垃圾收集时隐式关闭)。在Unix下,文件的目录条目根本不是创建的,或者在创建文件后立即删除。其他平台不支持此功能; 您的代码不应该依赖于使用此函数创建的临时文件,该文件在文件系统中具有或不具有可见名称。

    生成的对象可以用作上下文管理器。完成文件对象的上下文或销毁后,临时文件将从文件系统中删除。

    所述模式参数默认为'w+b'使得所创建的文件可以被读取并且没有被关闭写入。使用二进制模式,使其在所有平台上的行为一致,而不考虑存储的数据。 缓冲,编码和换行符被解释为 open()

    该目录,prefix和suffix的参数具有相同的含义和缺省值与mkstemp()

    返回的对象是POSIX平台上的真实文件对象。在其他平台上,它是一个类文件对象,其file属性是底层的真实文件对象。

    os.O_TMPFILE如果该标志可用且有效,则使用该标志(特定于Linux,需要Linux内核3.11或更高版本)。

    版本3.5中已更改:os.O_TMPFILE现在使用该标志(如果可用)。

    示例:

    from tempfile import TemporaryFile
    '''
    TemporaryFile类的构造方法,其返回的还是一个文件对象。但这个文件对象特殊的地方在于
    1. 对应的文件没有文件名,对除了本程序之外的程序不可见
    2. 在被关闭的同时被删除
    '''
    temp = TemporaryFile(dir=r'D:	est')  # 创建一个临时文件对象(类似文件句柄)
    
    temp.write(b'hello world')  # 向临时文件中写入内容(bytes类型)
    
    # 读取临时文件的内容
    temp.seek(0)     # 从头读取,和一般文件对象不同,seek方法的执行不能少
    print(temp.read())
    
    temp.close()    # 关闭文件的同时删除文件

    2、NamedTemporaryFile

    tempfile.NamedTemporaryFile(mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None,delete = True 

    NamedTemporaryFile 的运行方式与 TemporaryFile 完全相同。不同之处在于,NamedTemporaryFile 初始化时加上了delete参数,默认值为True。当此参数为True时和TemporaryFile类完全一致。如果是False,那么临时文件对象在被关闭时不会删除。因此可以在下面的代码中通过同样的对象再次打开。可以从name返回的类文件对象的属性中检索该名称。

    3、SpooledTemporaryFile

    tempfile.SpooledTemporaryFile(max_size = 0,mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None 

    此函数的运行方式与此完全相同TemporaryFile(),只是数据在内存中假脱机,直到文件大小超过max_size,或者直到fileno()调用文件的方法为止,此时内容将写入磁盘,操作继续进行 TemporaryFile()

    生成的文件有一个额外的方法,rollover()使文件无论其大小如何都会转到磁盘文件。

    返回的对象是一个类文件对象,其_file属性是一个io.BytesIOio.StringIO对象(取决于是否指定了二进制或文本模式)或真正的文件对象,具体取决于是否rollover()已被调用。类似文件的对象可以在with语句中使用,就像普通文件一样。

    在3.3版中更改: truncate方法现在接受一个size参数。

    4、mktemp

    python早期创建临时文件的方法是:

    1.首先使用mktemp()函数生成文件名(包涵文件路径)

    2.然后使用此名称创建文件。

    3.示例

    import tempfile
    tmp_path = tempfile.mktemp(dir=r"D:	est")  # 指定生成的文件目录:D:	est目录下
    print(tmp_path)  # D:	est	mpq44i5ytv  ---- tmpq44i5ytv是随机生成的文件名
    
    with open(tmp_path, 'w+') as f:  # mktemp只生成路径,并没有生成文件,需手动调用open创建
        f.write('Hello world')
        # f.flush()

    5、mkstemp

    tempfile.mkstemp(suffix = None,prefix = None,dir = None,text = False 

    mkstemp方法用于创建一个临时文件。该方法仅仅用于创建临时文件,调用tempfile.mkstemp函数后,返回包含两个元素的元组,第一个元素指示操作该临时文件的安全级别,第二个元素指示该临时文件的路径。参数suffix和prefix分别表示临时文件名称的suffix和prefix;dir指定了临时文件所在的目录,如果没有指定目录,将根据系统环境变量TMPDIR, TEMP或者TMP的设置来保存临时文件;参数text指定了是否以文本的形式来操作文件,默认为False,表示以二进制的形式来操作文件。

    import tempfile
    tmp_f = tempfile.mkstemp(dir=r"D:	est")
    print(tmp_f)  # (3, 'D:\test\tmp98sbordm')-->3:安全级别,D:\test\tmp98sbordm:文件所在目录
    
    fd = tmp_f[1]
    
    with open(fd, 'w+') as f:  # mkstemp生成了文件,但是文件内容为空,需手动open写入数据
        f.write('Hello world')

    三、创建临时目录

    1、TemporaryDirectory

    tempfile.TemporaryDirectory(suffix=None,prefix=None,dir =None

    此功能使用与之相同的规则安全地创建临时目录mkdtemp()。生成的对象可以用作上下文管理器。完成上下文或销毁临时目录对象后,将从文件系统中删除新创建的临时目录及其所有内容。

    可以从name返回的对象的属性中检索目录名称。当返回的对象用作上下文管理器时, nameaswith语句中将该子句的目标分配给该子句的目标(如果有)。

    可以通过调用该cleanup()方法显式清除该目录 。

    版本3.2中的新功能。

    2、mkdtemp

    tempfile.mkdtemp(suffix=None,prefix=None,dir =None

    尽可能以最安全的方式创建临时目录。目录的创建中没有竞争条件。该目录只能通过创建用户ID进行读取,写入和搜索。

    用户mkdtemp()负责在完成后删除临时目录及其内容。

    该prefix,suffix和DIR参数是一样的 mkstemp()

    mkdtemp() 返回新目录的绝对路径名。

    在版本3.5中更改:suffix,prefix和目录现在可以以字节为单位提供,以获取字节返回值。在此之前,只允许str。 suffix和prefix现在接受并默认为None使用适当的默认值。

    3、gettempdir

    tempfile.gettempdir

    用于返回保存临时文件的文件夹路径。这定义了此模块中所有函数的dir参数的默认值。

    Python搜索标准目录列表以找到调用用户可以创建文件的目录。列表是:

    1. 由...命名的目录 TMPDIR 环境变量。

    2. 由...命名的目录 TEMP 环境变量。

    3. 由...命名的目录 TMP 环境变量。

    4. 特定于平台的位置:

      • 在Windows中,目录C:TEMPC:TMP, TEMP,并TMP按此顺序。

      • 在所有其他平台,目录/tmp/var/tmp以及 /usr/tmp在这个顺序。

    5. 作为最后的手段,当前的工作目录。

    缓存此搜索的结果,请参阅tempdir下面的说明 。

    4、gettempdirb

    tempfile.gettempdirb

    gettempdir()但相同,返回值以字节为单位。

    版本3.5中的新功能。

    5、gettempprefix

    tempfile.gettempprefix

    返回用于创建临时文件的文件名prefix。这不包含目录组件。

    6、gettempprefixb

    tempfile.gettempprefixb

    gettempprefix()但相同,返回值以字节为单位。

    版本3.5中的新功能。

    该模块使用全局变量来存储用于返回的临时文件的目录名称gettempdir()。它可以直接设置以覆盖选择过程,但不鼓励这样做。此模块中的所有函数都使用dir参数,该参数可用于指定目录,这是推荐的方法。

    7、tempdir

    tempfile.tempdir

    当设置为其他值时None,此变量定义此模块中定义的函数的dir参数的默认值。

    如果tempdirNone(默认值)任何上述函数的调用,除非gettempprefix()它按照中描述的算法初始化gettempdir()

    四、示例

    以下是tempfile模块典型用法的一些示例:

    import tempfile
    
    # 1.创建一个临时文件并向其中写入一些数据
    fp = tempfile.TemporaryFile()
    fp.write(b'Hello world!')
    
    # 2.从文件中读取数据
    fp.seek(0)
    fp.read()  # b'Hello world!'
    
    # 3.关闭文件,它将被删除
    fp.close()
    
    # 4.使用上下文管理器创建临时文件
    with tempfile.TemporaryFile() as fp:
        fp.write(b'Hello world!')
        fp.seek(0)
        fp.read()  # b'Hello world!'
    # 文件现在已关闭并删除
    
    # 6.使用上下文管理器创建临时目录
    with tempfile.TemporaryDirectory() as tmpdirname:
        print('created temporary directory', tmpdirname)
    # 目录和内容已被删除
  • 相关阅读:
    js打印指定元素内容
    c# RedisHelper
    T4生成整理
    T4随记
    c# 文本超长截断
    mysql自动安装教程说明
    完全卸载mysql免安装版
    解决WebClient或HttpWebRequest首次连接缓慢问题
    c# 停靠窗体
    c#透明panel
  • 原文地址:https://www.cnblogs.com/Zzbj/p/11204539.html
Copyright © 2011-2022 走看看