1:tempfile 模块
tempfile 模块是用来创建/操作 临时文件(夹)的。有时候我们希望在程序运行过程中需要生成一个临时文件,并在某一个时间删除它。这就需要用到tempfile模块了。
2:tempfile.mkstemp
mkstemp(suffix=None, prefix=None, dir=None, text=False)
- suffix 是指定临时文件的后缀,比如’.h5’, '.txt’等。
- prefix 是指定文件的前缀,比如prefix = ‘t’,那么得到的文件名称的第一个字符就是’t’。如果是None就是没有前缀。
- dir是指定临时文件生成的目录所在。None将根据系统环境变量TMPDIR, TEMP或者TMP的设置来保存临时文件。
- text是指定是否以文本形式操作文件,False则是二进制形式。
- 返回的是两个参数,一个是fd,一个是fname,fd是文件描述符,fname是指生成的文件的绝对路径。
- 生成的文件的名称是随机的,如果你指定了suffix=‘.txt’和prefix=‘A’,那么文件名称就是’AXXXXXXX.txt’的格式。
3:文件描述符是什么?
内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
文件描述符在同一进程下与文件是对应的,一个描述符只指向一个文件,但是一个文件可以被多个文件描述符关联。
同一进程下,文件描述符是不可重复的。但是不同进程可以有一样的文件描述符。它们也可以指向不同的文件。
4: 如何删除创建的临时文件?
首先需要使用os.close(fd) 方法用于关闭指定的文件描述符 fd,
然后再使用os.remove(fname)删除临时文件。
5:创建的临时文件有什么特点?
函数描述中这样写道:
The file is readable and writable only by the creating user ID.
If the operating system uses permission bits to indicate whether a file is executable, the file is executable by no one. The file descriptor is not inherited by children of this process.
- 文件的读写权限只有创建者拥有
- 第二句没看太懂,可能是如果操作系统使用permission bits(不知道如何翻译)去强制指定该文件的权限,那么这个文件就会变成所有人都不可以使用的了。
- 该进程的子进程不会继承该文件描述符。