临时数据
文件可以用QFile打开并可以读写数据,另外在进行科学计算时,计算过程中产生的中间临时数据可以写到临时文件或缓存中,程序退出时自动删除临时文件和缓存中的数据
临时文件QTemporaryFile
QTemporaryFile类是一个对临时文件进行操作的I/O设备。
在进行大型科学运算时,通常会产生大量的中间结果数据
- 例如进行有限元计算时,一个规模巨大的刚度矩阵、质量矩阵和迭代过程中的中间结果会达到几十 GB 或上百 GB甚至更多,如果把这些数据放到内存中通常是放不下的。
- 需要把这些数据放到临时文件中,并保证临时文件不会覆盖现有的文件,计算过程中读取临时文件中的数据进行运算,计算结束后则自动删除临时文件。
QTemporaryFile类用于创建临时文件它继承自QFile,当用Open()方法打开设备时创建临时文件,并保证临时文件名是唯一的,不会和本机上的文件同名。
用QTemporaryFile创建临时文件对象的方法如下其中templateName是文件名称模板或者不用模板而用指定文件名,parent 是继承自QObject类的实例对象。
模板的文件名中包含6个或6个以上的大写"X"扩展名可以自已指定,例如QTemporaryFile"XXXXXXXXsdb")QTemporaryFile(“abXXXXXXXXcdsdb”)。
- 如果没有使用模板而使用具体文件名,则临时文件名是在文件名基础上添加新的扩展名,
- 如果指定了父对象则用应用程序的名称(用app.setApplicationName(str)设置)再加上新的扩展名作为临时文件名。
- 如果没有使用模板或指定文件名,则存放临时文件的路径是系统临时路径,可以通过QDir.tempPath()方法获取系统临时路径;
- 如果使用模板或指定文件名,则存放到当前路径下,当前路径可以用QDir.currentPath()方法查询。
from PySide6.QtCore import QTemporaryFile
QTemporaryFile(self)-> None
QTemporaryFile(parent: PySide6.QtCore.QObject)-> None
QTemporaryFile(templateName: str)-> None
QTemporaryFile(templateName: str,parent: PySide6.QtCore.QObject)-> None
临时文件QTemporaryFile说明
QTemporaryFile用于安全地创建唯一的临时文件。文件本身是通过调用open()创建的。临时文件的名称保证是唯一的(即,保证不会覆盖现有文件),并且该文件将在QTemporaryFile对象销毁后被删除。对于将数据存储在临时文件中的应用程序来说,这是一项避免数据损坏的重要技术。文件名要么是自动生成的,要么是基于模板创建的,模板会传递给QTemporaryFile的构造函数。
例子:
# Within a function/method...
file = QTemporaryFile()
if file.open():
# file.fileName()returns the unique file name
# The QTemporaryFile destructor removes the temporary file
# as it goes out of scope.
在调用close()之后重新打开QTemporaryFile是安全的。只要QTemporaryFile对象本身没有被销毁,唯一的临时文件就会存在,并由QTemporary file在内部保持打开。
可以通过调用fileName()找到临时文件的文件名。请注意,这仅在首次打开文件后定义;函数在此之前返回一个空字符串。
临时文件将具有名称的某些静态部分和计算为唯一的部分。默认文件名将由applicationName()确定(否则为qt_temp),并将被放置到tempPath()返回的临时路径中。如果指定自己的文件名,则默认情况下,相对文件路径不会放置在临时目录中,而是相对于当前工作目录。如果要调用rename()函数,指定正确的目录是很重要的,因为QTemporaryFile只能重命名与创建临时文件相同的卷/文件系统中的文件。
指定的文件名可以包含以下模板XXXXXX(六个大写"X"字符),该模板将被文件名的自动生成部分取代。请注意,该模板区分大小写。如果文件名中没有模板,QTemporaryFile会将生成的零件附加到给定的文件名中。
在Linux上,QTemporaryFile将尝试创建未命名的临时文件。如果成功,open()将返回true,但exists()将为false。如果您调用fileName()或任何调用它的函数,QTemporaryFile将为文件命名,因此大多数应用程序不会看到任何区别。
临时文件QTemporaryFile方法
QTemporaryFile 的常用方法如表所示。
- 创建临时文件对象后,用open()方法打开文件,这时生成临时文件,
- 临时文件名可以用fileName()方法获取,
- 临时文件的打开方式是读写模式(QIODeviceBase,ReadWrite)。
- 打开临时文件后,可以按照前面介绍的写人和读取方法来读写数据。
- 用setAutoRemove(bool)方法设置临时文件对象销毁后临时文件是否自动删除,默认为 True。
QTemporaryFile的方法及参数类型 | 返回值的类型 | 说甲 明 |
---|---|---|
open() | bool | 创建并打开临时文件 QTemporaryFile将始终以QIODevice::ReadWrite模式打开,这允许轻松访问文件中的数据。成功后,此函数将返回true,并将fileName()设置为所使用的唯一文件名。 |
fileName() | str | 获取临时文件名和路径 |
setAutoRemove(b:bool) | None | 设置是否自动删除临时文件 如果b为true,则将QTemporaryFile设置为自动删除模式。 默认情况下,"自动删除"处于启用状态。 如果将此属性设置为false,请确保应用程序在不再需要该文件时提供删除该文件的方法,包括将责任传递给另一个进程。始终使用fileName()函数获取名称,并且永远不要尝试猜测QTemporaryFile生成的名称。 在某些系统上,如果在关闭文件之前未调用fileName(),则无论此属性的状态如何,都可能删除临时文件。不应依赖此行为,因此应用程序代码应调用fileName()或启用自动删除功能。 |
autoRemove() | bool | 获取是否自动删除临时文件 如果QTemporaryFile处于自动删除模式,则返回true。自动删除模式将在销毁时自动从磁盘中删除文件名。这使得在堆栈上创建QTemporaryFile对象变得非常容易,用数据填充它,从中读取,最后在函数返回时,它会自动清理。 默认情况下,"自动删除"处于启用状态。 |
setFileTemplate(name:str) | None | 设置临时文件的模板 将文件名的静态部分设置为name。如果文件模板包含XXXXXX,该XXXXXX将自动替换为文件名的唯一部分,否则将根据指定的静态部分自动确定文件名。 如果名称包含相对文件路径,则该路径将相对于当前工作目录。如果您想使用系统的临时目录,可以使用tempPath()来构造名称。如果要调用rename()函数,指定正确的目录是很重要的,因为QTemporaryFile只能重命名与创建临时文件相同的卷/文件系统中的文件。 |
fileTemplate() | str | 返回设置的文件模板。默认文件模板将被称为qcoreappname.XXXXXXX,并被放置在tempPath()中。 |
createNativeFile(file:PySide6.QtCore.QFile) | PySide6.QtCore.QTemporaryFile | 如果文件还不是本机文件,则在tempPath()中创建一个QTemporaryFile,将文件的内容复制到其中,并返回指向临时文件的指针。如果文件已经是本机文件,则不执行任何操作并返回0。 f = QFile(“:/resources/file.txt”) QTemporaryFile.createNativeFile(f)# Returns a pointer to a temporary file f = QFile(“/users/qt/file.txt”) QTemporaryFile.createNativeFile(f)# Returns 0 |
createNativeFile(fileName:str) | PySide6.QtCore.QTemporaryFile | 这是一个重载函数。 处理给定的fileName,而不是现有的QFile对象。 |