Python基础学习:tempfile模块

资源代码:Lib/tempfile.py

    该模块用于创建临时文件和目录。它在所有支撑平台上都可以工作。TemporaryFile、NamedTemporaryFile、TemporaryDirectory和SpooledTemporaryFile是提供自动化清理的高级接口,也可用作上下文管理器。mkstemp()和mkdtemp()是低级函数,并且需要手动清理。

    所有的用户可调用的函数和构造器都提供了额外的菜蔬,以允许直接控制临时文件的名称与目录的位置。被该模块使用的文件名包括由随机字符组成的字符串,这种方法使得文件可以被安全的在共享的临时目录中被创建。为了维持向后兼容性,使得参数顺序存在一些奇妙之处;因此为了保证清晰,请使用关键字参数。

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

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

    返回一个file-like object对象,该对象可以被用作为一个临时存储区域。文件被安全的创建,与mkstemp()使用相同的规则。创建的文件会在其被关闭后销毁(包含隐含的关闭情况,即当该对象被当做垃圾回收时)。在Unix下,文件的目录项要么不被创建,要么在文件被创建后立刻销毁。其它平台不支持这个;你的代码不应该依靠一个使用该文件创建的、无论是否包含文件系统中的可见名的临时文件。

    结果对象可以被用作一个上下文管理器。在完成文件对象的上下文或销毁时,临时文件就会被从文件系统中移除。

    参数mode默认为’w+b’,因此被创建的文件可以在未被关闭的情况下进行读和写。使用二进制模式确保了它的行为在所有平台上始终保持一致,无论数据是怎样存储的。buffering、encoding和newline的解释如同open()函数中一样。

    dir、prefix和suffix参数的含义与mkstemp()中的同名参数相同,且默认值一致。

    被返回的对象是一个位于POSIX平台上的真实文件对象。在其它平台上,它是一个类文件对象,且其file属性是一个潜在的真实文件对象。

    os.O_TMPFILE标志可以在其可用且可工作时使用。

 

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

    返回一个类文件对象,该对象可被用做为一个临时存储区域。该文件备被安全的创建,使用与mkstemp()相同的规则。当该文件被关闭时(包括当该对象被当做垃圾回收时的隐含关闭),它将被销毁。在Unix下,文件的目录项要么不被创建,要么一创建就会被销毁。其它平台不支持这种操作;你的代码不应该依靠一格使用该函数创建的临时文件,该文件在文件系统中不确定是否有可见的名称。

    结果对象可以被用作为一个上下文管理器。在完成文件对象的上下文或销毁后,临时文件将会被从文件系统中移除。

    mode参数默认为’w+b’,因此被创建的文件可以在不被关闭的情况下进行读写。二进制模式被使用时,它的行为始终在所有平台上保持一致,不管数据是如何被存储的。buffering、encoding和newline的意义与open()中的一致。

    dir、prefix和suffix参数的意义和默认值与mkstemp()中的一致。

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

    os.0_TMPFILE标志可以被使用,只要他有效且可工作。

 

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

    该函数操作与TemporaryFile()的行为精确相似,除了保证文件在文件系统中有可见的名称(在Unix下,目录整体不连接。)该名称可以从返回的类文件对象的name属性中剥离出来。不论怎样,该名称可以被用作二次打开文件的手段。被命名的临时文件扔被打开,尽管经由不同的平台(Unix可用,Windows NT及以后版本不可用)。如果delte为真(默认值),文件会在其被关闭后被删除。被返回的对象总是一个file属性隐含为真文件对象的类文件对象。类文件对象可以被用在一个with陈述中,就像一个正常文件一样。

 

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()。

    结果文件拥有一个额外的方法mrollover(),它造成文件翻滚到一个硬盘上的文件,且不顾及它的大小。

    被返回的对象是一个类文件对象,它的_file属性不是一个io.BytesIO或io.StringIO对象(取决于二进制模式或文本模式那个在mode中被明确),就是一个真实的文件对象。至于到底是那个,取决于rollover()被什么调用。类文件对象可以被用于with陈述,就和普通文件一样。

 

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

    该函数安全的创建一个临时文件,其采用与mkdtemp()相同的规则。结果对象可以被用作上下文管理器。在完成上下文或临时文件目录被销毁后,新创建的临时目录及其所有内容将被从文件系统中移除。

    目录名可以倍从被返回的对象的name属性中剥离。当被返回的对象被用作为上下文管理器,name将会被分配给在with陈述中的as从句的目标,仅在唯一指定的情况下。

    目录可以被明确的清理,只需通过调用cleanup()方法。

 

tempfile. mkstemp(suffix=None, prefix=None, dir=None, test=False)

    以最安全的方式创建一个临时文件。该文件的创建没有任何竞争条件,且假设平台支持实施os.O_EXCL标志用于os.open()。该文件只对创建它的用户ID开放读写权限。如果平台使用允许位取指示什么文件可以被执行,则该文件可以被任何人执行。文件描述器不可被子进程所继承。

    不同于TemporaryFile(),mkstemp()的使用者是会为其删除临时文件而负责的。

    如果suffix不是None,文件名将会以该suffix而结尾,否则就不会有后缀。mkstemp()不会在文件名与后缀名之间放着分割点;如果你需要这么做,请将分割点初始化在suffix中。

    如果prefix不是None,文件名将会以prfix开始;否则,将会使用默认的prefix。默认情况下,gettempprefix()或gettempprefixb()的返回值是适当的。

    如果dir不是None,文件将被在该目录中创建;否则,默认的目录将被使用。默认的目录从基于平台的列表中被选择,但是用户的应用可以控制目录位置,通过建立TEMDIR、TEMP或TMP环境变量。因此不正保证生成的文件名拥有良好的特性,以至于当它经由os.popen()通过外部命令时,它不会请求队列。

    如果suffix、perfix和dir都不是None,他们必须是同一类型。如果他们是字节,被返回的名称将会用字节取代字符串。如果你想要使用字节返回值有其它默认行为,请通过suffix=b。

    如果text被给出,它按时文件的将以二进制模式或文本模式被打开。在相同的平台上,它的结果无差别。

 

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

    创建一个临时目录,采用最安全的方式。目录的创建中没有任何金正要求。该目录只可被创建其的用户ID开放读写权限。

    mkdtemp()的使用者必须为对目录的删除操作或内容改写操作负责。

    prefix、suffix和dir参数与mkstemp()中的含义相同。

    mkdtemp()返回新目录的绝对地址名。

 

tempfile. gettempdir()

    返回临时文件所使用目录的目录名。它定义了dir参数在该模块中所有函数内的默认值。

    Python检索一个标准目录列表取找出一个调用者可在其中更顺利创建文件的目录。

该列表为:

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

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

3.由换将变量TMP命名的目录;

4.一个平台指定的位置:

    在Windows中,目录为C:\TEMP、C:\TMP、\TEMP和\TMP。

    在其它所有平台上,目录为/tmp、/var/tmp和/usr/tmp。

5.当前工作目录为保底存储。

    该搜索的结果将会被缓存,请查看下方tempdir的描述。

 

tempfile. gettempdirb()

    与gettempdir()相似,只不过返回值是字节格式。

 

tempfile. gettempprefix()

    返回用于创建临时文件的文件名前缀。该行为不包含文件组件。

 

tempfile. gettempprefixb()

    与gettempprefixb()相似,但返回值为字节格式。

    该模块使用一个全局变量取存储经gettempdir()返回的用于临时文件的目录的名称。它可以被直接建立区重写选择进城,但是不鼓励这种操作。该模块中的所有函数蚕蛹dir参数,这可以用于明确目录。我们推荐如此使用。

 

tempfile. tempdir

    当建立一个非None的值,该标量定义了dir参数在该模块中所有函数内的默认值。

    如果tempdir为None,在除了gettempprefix()函数外前述所有函数中,它跟随gettempdir()中描述的算法进行初始化。

 

1.示例

    这里有一些tempfile模块的典型适用例程:

>>> import tempfile

 

# create a temporary file and write some data to it

>>> fp = tempfile.TemporaryFile()

>>> fp.write(b'Hello world!')

# read data from file

>>> fp.seek(0)

>>> fp.read()

b'Hello world!'

# close the file, it will be removed

>>> fp.close()

 

# create a temporary file using a context manager

>>> with tempfile.TemporaryFile() as fp:

...     fp.write(b'Hello world!')

...     fp.seek(0)

...     fp.read()

b'Hello world!'

>>>

# file is now closed and removed

 

# create a temporary directory using the context manager

>>> with tempfile.TemporaryDirectory() as tmpdirname:

...     print('created temporary directory', tmpdirname)

>>>

# directory and contents have been removed

 

2.不赞成的函数和变量

    创建临时文件的一种历史方法是首先使用mktemp()函数生成文件名,然后使用此名称创建文件。不幸的是,这种方法不安全,因为不同的进程可以在调用mktemp()后创建文件,但是其余的可能会尝试使用第一个进城继续这个操作,这使得同名文件有被覆盖的危险。解决方法是联合两步,及时创建一个文件。mkstemp()和先前提到的其余函数都使用了这种操作。

 

tempfile. mktemp(suffix=’’, prefix=’tmp’, dir=None)

    返回一个文件的绝对路径名,它在调用生成时不应存在。prefix、suffix和dir参数与mkstemp()中的相似,除了names为字节格式,suffix=None和prefix=None不被支持。

 

警告:使用这些函数可能会给一个程序中引入一些安全漏洞。当你用文件名做任何事情时,其他人可能会攻击你。mktemp()的用法可以被NamedTemporaryFile()轻易取代,仅需通过参数设置delete=False:

>>> f = NamedTemporaryFile(delete=False)
>>> f.name
'/tmp/tmptjujjt'
>>> f.write(b"Hello World!\n")
13
>>> f.close()
>>> os.unlink(f.name)
>>> os.path.exists(f.name)
False
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
python模块详解 各个模块的详解 核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块 1.11. operator 模块 1.12. copy 模块 1.13. sys 模块 1.14. atexit 模块 1.15. time 模块 1.16. types 模块 1.17. gc 模块 更多标准模块 2.1. 概览 2.2. fileinput 模块 2.3. shutil 模块 2.4. tempfile 模块 2.5. StringIO 模块 2.6. cStringIO 模块 2.7. mmap 模块 2.8. UserDict 模块 2.9. UserList 模块 2.10. UserString 模块 2.11. traceback 模块 2.12. errno 模块 2.13. getopt 模块 2.14. getpass 模块 2.15. glob 模块 2.16. fnmatch 模块 2.17. random 模块 2.18. whrandom 模块 2.19. md5 模块 2.20. sha 模块 2.21. crypt 模块 2.22. rotor 模块 2.23. zlib 模块 2.24. code 模块 线程和进程 3.1. 概览 3.2. threading 模块 3.3. Queue 模块 3.4. thread 模块 3.5. commands 模块 3.6. pipes 模块 3.7. popen2 模块 3.8. signal 模块 数据表示 4.1. 概览 4.2. array 模块 4.3. struct 模块 4.4. xdrlib 模块 4.5. marshal 模块 4.6. pickle 模块 4.7. cPickle 模块 4.8. copy_reg 模块 4.9. pprint 模块 4.10. repr 模块 4.11. base64 模块 4.12. binhex 模块 4.13. quopri 模块 4.14. uu 模块 4.15. binascii 模块 文件格式 5.1. 概览 5.2. xmllib 模块 5.3. xml.parsers.expat 模块 5.4. sgmllib 模块 5.5. htmllib 模块 5.6. htmlentitydefs 模块 5.7. formatter 模块 5.8. ConfigParser 模块 5.9. netrc 模块 5.10. shlex 模块 5.11. zipfile 模块 5.12. gzip 模块 邮件和新闻消息处理 6.1. 概览 6.2. rfc822 模块 6.3. mimetools 模块 6.4. MimeWriter 模块 6.5. mailbox 模块 6.6. mailcap 模块 6.7. mimetypes 模块 6.8. packmail 模块 6.9. mimify 模块 6.10. multifile 模块 网络协议 7.1. 概览 7.2. socket 模块 7.3. select 模块 7.4. asyncore 模块 7.5. asynchat 模块 7.6. urllib 模块 7.7. urlparse 模块 7.8. cookie 模块 7.9. robotparser 模块 7.10. ftplib 模块 7.11. gopherlib 模块 7.12. httplib 模块 7.13. poplib 模块 7.14. imaplib 模块 7.15. smtplib 模块 7.16. telnetlib 模块 7.17. nntplib 模块 7.18. SocketServer 模块 7.19. BaseHTTPServer 模块 7.20. SimpleHTTPServer 模块 7.21. CGIHTTPServer 模块 7.22. cgi 模块 7.23. webbrowser 模块 国际化 8.1. locale 模块 8.2. unicodedata 模块 8.3. ucnhash 模块 多媒体相关模块 9.1. 概览 9.2. imghdr 模块 9.3. sndhdr 模块 9.4. whatsound 模块 9.5. aifc 模块 9.6. sunau 模块 9.7. sunaudio 模块 9.8. wave 模块 9.9. audiodev 模块 9.10. winsound 模块 数据储存 10.1. 概览 10.2. anydbm 模块 10.3. whichdb 模块 10.4. shelve 模块 10.5. dbhash 模块 10.6. dbm 模块 10.7. dumbdbm 模块 10.8. gdbm 模块 工具和实用程序 11.1. dis 模块 11.2. pdb 模块 11.3. bdb 模块 11.4. profile 模块 11.5. pstats 模块 11.6. tabnanny 模块 其他模块 12.1. 概览 12.2. fcntl 模块 12.3. pwd 模块 12.4. grp 模块 12.5. nis 模块 12.6. curses 模块 12.7. termios 模块 12.8. tty 模块 12.9. resource 模块 12.10. syslog 模块 12.11. msvcrt 模块 12.12. nt 模块 12.13. _winreg 模块 12.14. posix 模块 执行支持模块 13.1. dospath 模块 13.2. macpath 模块 13.3. ntpath 模块 13.4. posixpath 模块 13.5. strop 模块 13.6. imp 模块 13.7. new 模块 13.8. pre 模块 13.9. sre 模块 13.10. py_compile 模块 13.11. compileall 模块 13.12. ihooks 模块 13.13. linecache 模块 13.14. macurl2path 模块 13.15. nturl2path 模块 13.16. tokenize 模块 13.17. keyword 模块 13.18. parser 模块 13.19. symbol 模块 13.20. token 模块 其他模块 14.1. 概览 14.2. pyclbr 模块 14.3. filecmp 模块 14.4. cmd 模块 14.5. rexec 模块 14.6. Bastion 模块 14.7. readline 模块 14.8. rlcompleter 模块 14.9. statvfs 模块 14.10. calendar 模块 14.11. sched 模块 14.12. statcache 模块 14.13. grep 模块 14.14. dircache 模块 14.15. dircmp 模块 14.16. cmp 模块 14.17. cmpcache 模块 14.18. util 模块 14.19. soundex 模块 14.20. timing 模块 14.21. posixfile 模块 14.22. bisect 模块 14.23. knee 模块 14.24. tzparse 模块 14.25. regex 模块 14.26. regsub 模块 14.27. reconvert 模块 14.28. regex_syntax 模块 14.29. find 模块
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值