• Python 临时文件、目录的生成


    1. 问题

    创建一个临时文件夹或目录,并希望使用完之后自动销毁。



    2. 解决方案

    tempfile 模块中很多的函数可以完成这任务。

    创建一个匿名临时文件,可以使用tempfile.TemporaFile这种方式文件会自动销毁

    from tempfile import TemporaryFile
    
    with TemporaryFile('w+t') as f:
        # Read/write to the file
        f.write('Hello World\n')
        f.write('Testing\n')
    
        # 返回到开头并读取数据
        f.seek(0)
        data = f.read()
        print(data)
    
    f = TemporaryFile('w+t')
    f.write('Hello World\n')
    f.write('Testing')
    f.seek(0)
    print(f.read())
    

    上述两种方法等价。输出:

    Hello World
    Testing
    

    TemporaFile 的第一个参数是文件模式,文本模式使用w+t,二进制模式使用w+bTemporaryFile() 另外还支持跟内置的 open() 函数一样的参数。

    with TemporaryFile('w+t', encoding='utf-8', errors='ignore') as f:
    

    创建有名字的临时文件。可以使用NamedTemporaryFile()这种方式文件会自动销毁

    from tempfile import NamedTemporaryFile
    
    f = NamedTemporaryFile(prefix='mytemp', suffix='.md', dir='C:/Users/T14/AppData/Local/Temp/')
    print(f.name)
    
    C:\Users\T14\AppData\Local\Temp\mytempcecb12hp.md
    

    创建临时目录。可以使用tempfile.TemporaryDirectory

    from tempfile import TemporaryDirectory
    
    dir = TemporaryDirectory()
    print(dir.name)
    
    with TemporaryDirectory() as dirname:
        print(dirname)
    

    上述两种方法等价。输出:

    C:\Users\T14\AppData\Local\Temp\tmpac0p48m1
    C:\Users\T14\AppData\Local\Temp\tmphjcngywq
    


    3. 讨论

    TemporaryFile()NamedTemporaryFile()TemporaryDirectory() 是处理临时文件、目录的最简单的方式了,因为它们会自动处理所有的创建和清理步骤。 在一个更低的级别,你可以使用 mkstemp()mkdtemp() 来创建临时文件和目录。比如:

    import tempfile
    
    tmp = tempfile.mkstemp()		# 生成临时文件
    print(tmp)
    print(tempfile.gettempdir())	# 查看临时文件、目录路径	
    tmp2 = tempfile.mkdtemp()		# 生成临时目录
    print(tmp2)
    print(tempfile.gettempdir())	
    
    (3, 'C:\\Users\\T14\\AppData\\Local\\Temp\\tmp8al28qr3')
    C:\Users\T14\AppData\Local\Temp
    C:\Users\T14\AppData\Local\Temp\tmphdj6ac__
    C:\Users\T14\AppData\Local\Temp
    

    但是,这些函数并不会做进一步的管理了。 例如,函数 mkstemp() 仅仅就返回一个原始的OS文件描述符,你需要自己将它转换为一个真正的文件对象。 同样你还需要自己清理这些文件。


    所有和临时文件相关的函数都允许你通过使用关键字参数 前缀prefix 、后缀suffix 和 文件路径dir 来自定义目录以及命名规则。比如:

    f = NamedTemporaryFile(prefix='mytemp', suffix='.md', dir='C:/Users/T14/AppData/Local/Temp/')
    print(f.name)
    
    C:\Users\T14\AppData\Local\Temp\mytempyqr3xvy7.md
    

    最后一点,尽可能以最安全的方式使用 tempfile 模块来创建临时文件。



    来自:python3-cookbook

  • 相关阅读:
    js正则表达式中的问号使用技巧总结
    380. Insert Delete GetRandom O(1)
    34. Find First and Last Position of Element in Sorted Array
    162. Find Peak Element
    220. Contains Duplicate III
    269. Alien Dictionary
    18. 4Sum
    15. 3Sum
    224. Basic Calculator
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/keye/p/16577759.html
Copyright © 2020-2023  润新知