class QTextStream#

QTextStream类提供了一个方便的接口,用于读取和写入文本。《更多》…

Inheritance diagram of PySide6.QtCore.QTextStream

摘要#

方法#

注释

本文档可能包含自动从C++翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您在翻译中遇到问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建问题报告来通知我们。

详细描述#

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

QTextStream可以在一个QIODevice、一个QByteArray或一个QString上操作。使用QTextStream的流操作符,您可以方便地读写单词、行和数字。对于生成文本,QTextStream支持字段填充和对齐,以及数字的格式化。示例

data = QFile("output.txt")
if data.open(QFile.WriteOnly | QFile.Truncate):
    out = QTextStream(data)
    out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7
    # writes "Result: 3.14      2.7       "

也常用QTextStream来读取控制台输入和写入控制台输出。QTextStream是区域感知的,并将自动使用正确的编码解码标准输入。示例

stream = QTextStream(stdin)
line = QString()
while stream.readLineInto(line):
    ...

除了使用 QTextStream 的构造函数外,您也可以通过调用 setDevice()setString() 来设置 QTextStream 操作的设备或字符串。您可以通过调用 seek() 来定位到某个位置,当没有数据可读取时,atEnd() 将返回 true。如果您调用 flush()QTextStream 将将所有数据从其写入缓冲区清除到设备,并在设备上调用 flush()

在内部,QTextStream 使用基于 Unicode 的缓冲区,并且 QStringConverter 会被 QTextStream 使用来自动支持不同的编码。默认情况下,使用 UTF-8 进行读取和写入,但您也可以通过调用 setEncoding() 来设置编码。还支持自动 Unicode 检测。当此功能启用(默认行为)时,QTextStream 将检测UTF-8、UTF-16或UTF-32的字节序标记(BOM),并在读取时切换到适当的UTF编码。默认情况下,QTextStream 不会写入BOM,但您可以启用此功能,通过调用 setGenerateByteOrderMark (true)。当 QTextStream 直接操作 QString 时,编码被禁用。

使用 QTextStream 读取文本文件时,主要有三种方式。

  • 分段读取,通过调用 readLine()readAll()

  • 逐词读取。 QTextStream 支持输出到 QStringQByteArray 和 char* 缓冲区。单词由空格分隔,并且自动跳过前导空白。

  • 逐字符读取,通过将内容流式传输到 QChar 或 char 类型。此方法常用于在不考虑字符编码和换行符语义的情况下解析文件时的便捷输入处理。要跳过空白字符,请调用 skipWhiteSpace()

由于文本流使用缓冲区,您不应使用超类的实现从流中读取。例如,如果您有一个 QFile 并直接使用 readLine() 读取它而不是使用流,文本流的内部位置将与文件位置不同步。

默认情况下,从文本流中读取数字时,QTextStream 将自动检测数字的基础表示。例如,如果数字以“0x”开头,假设为十六进制形式。如果以数字 1-9 开头,假定是十进制形式,等等。您可以通过调用 setIntegerBase() 来设置整数基数,从而禁用自动检测。示例

in = QTextStream("0x50 0x20")
firstNumber, = int()
in >> firstNumber # firstNumber == 80
in >> dec >> secondNumber # secondNumber == 0
ch = char()
in >> ch # ch == 'x'

QTextStream 支持许多文本生成格式选项。您可以通过调用 setFieldWidth()setPadChar() 来设置字段宽度和填充字符。使用 setFieldAlignment() 来设置每个字段内的对齐方式。对于实数,调用 setRealNumberNotation()setRealNumberPrecision() 来设置表示法(SmartNotationScientificNotationFixedNotation)和生成的数字的位数精度。还可以通过 setNumberFlags() 获取一些额外的数字格式选项。

类似于标准 C++ 库中的 <iostream>QTextStream 也定义了几个全局操纵器函数。

操纵器

描述

bin

setIntegerBase (2)相同。

oct

setIntegerBase (8)相同。

dec

setIntegerBase (10)相同。

hex

setIntegerBase (16)相同。

showbase

setNumberFlagsnumberFlags() | ShowBase)相同。

forcesign

等同于 setNumberFlagsnumberFlags() | ForceSign)。

强制添加小数点

等同于 setNumberFlagsnumberFlags() | ForcePoint)。

不显示基数

等同于 setNumberFlagsnumberFlags() & ~ ShowBase)。

不强制加符号

等同于 setNumberFlagsnumberFlags() & ~ ForceSign)。

不强制小数点

等同于 setNumberFlagsnumberFlags() & ~ ForcePoint)。

大写基数

等同于 setNumberFlagsnumberFlags() | UppercaseBase)。

大写数字

等同于 setNumberFlagsnumberFlags() | UppercaseDigits)。

小写基数

setNumberFlags ( numberFlags() & ~ UppercaseBase ).相同。

lowercasedigits

setNumberFlags ( numberFlags() & ~ UppercaseDigits ).相同。

fixed

setRealNumberNotation ( FixedNotation ).相同。

scientific

setRealNumberNotation ( ScientificNotation ).相同。

left

setFieldAlignment ( AlignLeft ).相同。

right

setFieldAlignment ( AlignRight ).相同。

center

setFieldAlignment ( AlignCenter ).相同。

endl

与 operator<<(′′\n) 和 flush() 相同。

flush

flush() 相同。

reset

reset() 相同。

ws

skipWhiteSpace() 相同。

bom

setGenerateByteOrderMark (true) 相同。

此外,Qt提供了三个带参数的全局操作符:qSetFieldWidth()qSetPadChar()qSetRealNumberPrecision()

class RealNumberNotation#

此枚举指定用于以字符串形式表达floatdouble所用的表示法。

常量

描述

QTextStream.ScientificNotation

科学记数法(来自printf()%e标志)。

QTextStream.FixedNotation

定点表示法(来自printf()%f标志)。

QTextStream.SmartNotation

科学或定点表示法,具体情况取决于哪种表示法更具意义(来自printf()%g标志)。

class FieldAlignment#

此枚举指定当字段宽度大于占位文本时如何对字段中的文本进行对齐。

常量

描述

QTextStream.AlignLeft

在字段的右边进行填充。

QTextStream.AlignRight

在字段的左边进行填充。

QTextStream.AlignCenter

在字段的两侧进行填充。

QTextStream.AlignAccountingStyle

与AlignRight相同,除了数字的符号左对齐。

另请参阅

setFieldAlignment()

class Status#

此枚举描述文本流的当前状态。

常量

描述

QTextStream.Ok

文本流操作正常。

QTextStream.ReadPastEnd

文本流已读取到底层数据的末尾。

QTextStream.ReadCorruptData

文本流已读取损坏的数据。

QTextStream.WriteFailed

文本流不能写入到底层数据设备。

另请参阅

status()

class NumberFlag#

(继承自enum.Flag)此枚举指定可以设置的多个标志,这些标志将影响整数、浮点数和双精度浮点数的输出。

常量

描述

QTextStream.ShowBase

如果基数是16("0x")、8("0")或2("0b"),则将基数作为前缀显示。

QTextStream.ForcePoint

始终在数字中使用小数分隔符,即使没有小数。

QTextStream.ForceSign

始终在数字中使用符号,即使对于正数。

QTextStream.UppercaseBase

使用基数前缀的大写版本("0X","0B")。

QTextStream.UppercaseDigits

使用大写字母来表达10至35的数字,而不是小写。

另请参阅

setNumberFlags()

__init__(array[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])#
参数:

构建一个在 array 上操作的 QTextStream,使用 openMode 定义打开模式。内部,数组被一个 QBuffer 包装。

__init__()

构建一个 QTextStream 。在您可以使用它进行读取或写入之前,必须分配一个设备或字符串。

另请参阅

setDevice() setString()

__init__(device)
参数:

deviceQIODevice

构建一个在 device 上操作的 QTextStream

atEnd()#
返回类型:

bool

如果从 QTextStream 中没有更多的数据可读,则返回 true;否则返回 false。这类似于调用 atEnd() ,但 QTextStream 还会考虑其内部 Unicode 缓冲区。

autoDetectUnicode()#
返回类型:

bool

如果启用自动Unicode检测,则返回 true,否则返回 false。自动Unicode检测默认启用。

device()#
返回类型:

QIODevice

返回与 QTextStream 关联的当前设备,如果没有分配设备则返回 None

另请参阅

setDevice() string()

encoding()#
返回类型:

编码

返回当前分配给流的编码。

fieldAlignment()#
返回类型:

字段对齐

返回当前的字段对齐方式。

fieldWidth()#
返回类型:

int

返回当前的字段宽度。

另请参阅

setFieldWidth()

flush()#

刷新任何等待写入设备的缓冲数据。

如果 QTextStream 在字符串上操作,则此函数不执行任何操作。

generateByteOrderMark()#
返回类型:

bool

如果在使用UTF编码时将 QTextStream 设置为生成UTF BOM(字节顺序标记),则返回 true;否则返回 false。UTF BOM的生成默认设置为false。

integerBase()#
返回类型:

int

返回当前整数的基数。0表示在读取时检测到的基数,或者在生成数字时为10(十进制)。

另请参阅

setIntegerBase() number() numberFlags()

locale()#
返回类型:

QLocale

返回此流的区域设置。默认区域设置是C。

另请参阅

setLocale()

numberFlags()#
返回类型:

NumberFlag的组合。

返回当前的数字标志。

__lshift__(ch)#
参数:

chQChar

返回类型:

QTextStream

将字符 c 写入流,然后返回 QTextStream 的引用。

另请参阅

setFieldWidth()

__lshift__(i)
参数:

i – int

返回类型:

QTextStream

这是一个重载函数。

将无符号长整型 i 写入流。

__lshift__(i)
参数:

i – int

返回类型:

QTextStream

这是一个重载函数。

将有符号长整型 i 写入流。

__lshift__(f)
参数:

f – float

返回类型:

QTextStream

这是一个重载函数。

将双精度浮点数 f 写入流。

__lshift__(s)
参数:

s – 字符串

返回类型:

QTextStream

将字符串 string 写入流,并返回 QTextStream 的引用。在写入流之前,该字符串使用分配的编码(默认为UTF-8)进行编码。

__lshift__(arg__2)
参数:

arg__2QDomNode

返回类型:

QTextStream

__lshift__(array)
参数:

arrayQByteArray

返回类型:

QTextStream

这是一个重载函数。

array 写入流。使用 fromUtf8()array 的内容进行转换。

__lshift__(ch)
参数:

ch – int

返回类型:

QTextStream

这是一个重载函数。

将 ASCII 编码的 c 转换为 QChar 对象,然后将其写入流。

__lshift__(m)
参数:

mQTextStreamManipulator

返回类型:

QTextStream

__lshift__(s)
参数:

s – 字符串

返回类型:

QTextStream

这是一个重载函数。

string 写入流,并返回对 QTextStream 的引用。

__lshift__(s)
参数:

sQLatin1String

返回类型:

QTextStream

__rshift__(array)#
参数:

arrayQByteArray

返回类型:

QTextStream

这是一个重载函数。

将字转换为 UTF-8,然后存储在 array 中。

另请参阅

toLatin1()

padChar()#
返回类型:

QChar

返回当前填充字符。

pos()#
返回类型:

int

返回与流当前位置相对应的设备位置,或者出错时返回 -1(例如,如果没有设备或字符串,或者设备出现错误)。

因为 QTextStream 是缓冲的,此函数可能需要搜索设备以重建有效的设备位置。此操作可能非常昂贵,因此您可能想在紧密循环中避免调用此函数。

另请参阅

seek()

read(maxlen)#
参数:

maxlen – int

返回类型:

str

从流中读取最多 maxlen 个字符,并将读取的数据作为 QString 返回。

另请参阅

readAll() readLine() read()

readAll()#
返回类型:

str

读取流的全部内容,并以 QString 返回。在处理大文件时避免使用此函数,因为这会消耗大量的内存。

当不知道有多少数据可用时,调用 readLine() 比较好。

另请参阅

readLine()

readLine([maxlen=0])#
参数:

maxlen – int

返回类型:

str

从流中读取一行文本,并以 QString 返回。允许的最大行长度设置为 maxlen。如果流中的行超过这个长度,则会在此 maxlen 字符后分割行并部分返回。

如果 maxlen 为 0,则行可以是任意长度。

返回的行没有尾随的换行符(”\n” 或 “\r\n”),因此调用 trimmed() 可能是不必要的。

如果流已读到文件的末尾,readLine() 将返回一个空 QString。对于字符串,或对于支持此特性的设备,您可以使用 atEnd() 显式测试流的末尾。

另请参阅

readAll() readLine()

readLineInto(line[, maxlen=0])#
参数:
  • line – str

  • maxlen – int

返回类型:

bool

从流中读取一行文本到 line 中。如果 lineNone,则不会存储读取的行。

允许的最大行长度设置为 maxlen。如果流中的行超过这个长度,则会在此 maxlen 字符后分割行并部分返回。

如果 maxlen 为 0,则行可以是任意长度。

生成的行没有尾随的换行符(”\n” 或 “\r\n”),因此调用 trimmed() 可能是不必要的。

如果line有足够的空间接收即将读取的数据,此函数可能不需要分配新的内存。正因为如此,它可能比readLine()快。

如果流已读到文件末尾或发生错误,则返回false;否则返回true。在任何情况下,调用之前line中的内容都将被舍弃。

另请参阅

readAll() readLine()

realNumberNotation()#
返回类型:

RealNumberNotation

返回当前实数表示法。

realNumberPrecision()#
返回类型:

int

返回当前实数精度,即QTextStream在生成实数时(FixedNotationScientificNotation)将写入的小数位数,或最大有效数字位数(SmartNotation)。

reset()#

重置QTextStream的格式化选项,使其恢复到初始构建状态。设备、字符串和任何缓冲数据保持不变。

resetStatus()#

重置文本流的当前状态。

另请参阅

Status status() setStatus()

seek(pos)#
参数:

pos – int

返回类型:

bool

向设备的 pos 位置移动。如果成功,则返回 true;否则返回 false

setAutoDetectUnicode(enabled)#
参数:

enabled – bool

如果 enabled 是 true,QTextStream 将尝试通过查看流数据以检测 Unicode 编码,看是否能找到 UTF-8、UTF-16 或 UTF-32 字节顺序标记 (BOM)。如果找到此标记,QTextStream 将用 UTF 编码替换当前编码。

此函数可与应用setEncoding() 功能一起使用。通常将编码设置为 UTF-8,然后启用 UTF-16 检测。

setDevice(device)#
参数:

deviceQIODevice

将当前设备设置为 device。如果设备已被分配,QTextStream 将在替换旧设备之前调用 flush()

注释

此函数将区域设置重置为默认区域设置('C')和默认编码,UTF-8。

另请参阅

device() setString()

setEncoding(encoding)#
参数:

encodingEncoding

将此流的编码设置为 encoding。编码用于解码从分配的设备中读取的任何数据,以及编码要写入的任何数据。默认情况下,使用 Utf8,并启用自动 Unicode 检测。

如果 QTextStream 在字符串上操作,则此函数不执行任何操作。

警告

如果在从打开的顺序套接字读取文本流时调用此函数,内部缓冲区可能仍然包含使用旧编码解码的文本。

setFieldAlignment(alignment)#
参数:

alignmentFieldAlignment

将域对齐设置为 mode。当与 setFieldWidth() 一起使用时,此函数允许您生成左对齐、右对齐或居中对齐的格式化输出。

setFieldWidth(width)#
参数:

width – int

将当前字段宽度设置为 width。如果 width 为 0(默认值),则字段宽度等于生成的文本长度。

注释

此字段宽度应用于在此函数被调用后附加到此流的每个元素(例如,它还会填充 endl)。这种表现与 STL 中的类似类不同,其中字段宽度仅应用于下一个元素。

另请参阅

fieldWidth() setPadChar()

setGenerateByteOrderMark(generate)#
参数:

generate – bool

如果 generate 为 true 且使用了 UTF 编码,QTextStream 将在写入设备之前插入 BOM(字节顺序标记)。如果 generate 为 false,则不会插入 BOM。必须在写入任何数据之前调用此函数。否则,不会执行任何操作。

另请参阅

generateByteOrderMark() bom()

setIntegerBase(base)#
参数:

base – int

设置整数的基数为base,既用于读取也用于生成数字。《code class="docutils literal notranslate">base

可以是2(二进制)、8(八进制)、10(十进制)或16(十六进制)。如果《code class="docutils literal notranslate">base

为0,《a class="reference internal" href="#PySide6.QtCore.QTextStream" title="PySide6.QtCore.QTextStream">QTextStream将通过检查流中的数据尝试检测基数。在生成数字时,《a class="reference internal" href="#PySide6.QtCore.QTextStream" title="PySide6.QtCore.QTextStream">QTextStream假定为10,除非已经显式设置了基数。

另请参阅

integerBase() number() setNumberFlags()

setLocale(locale)#
参数:

localeQLocale

将此流的区域设置为locale。指定的区域用于数字与它们的字符串表示之间的转换。

默认区域为C,它是一个特殊案例 - 由于向后兼容性原因,不使用千位分隔符。

另请参阅

locale()

setNumberFlags(flags)#
参数:

flags – 组合了NumberFlag

设置当前数字标志为flags。`flags`是一组来自`NumberFlag`枚举的标志,并描述了生成代码的格式化选项(例如,是否总写入数字的基数或符号)。

setPadChar(ch)#
参数:

chQChar

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

设置填充字符为 ch。默认值是ASCII空格字符(’ ‘),或者 QChar(0x20)。此字符用于在生成文本时填充字段中的空间。

示例

s = QString()
out = QTextStream(s)
out.setFieldWidth(10)
out.setFieldAlignment(QTextStream.AlignCenter)
out.setPadChar('-')
out << "Qt" << "rocks!"

字符串 s 包含

Qtrocksnot = Qtrocksnot - 1

另请参阅

padChar() setFieldWidth()

setRealNumberNotation(notation)#
参数:

notationRealNumberNotation

将实数表示法设置为 notationSmartNotationFixedNotationScientificNotation)。在读取和生成数字时,QTextStream 使用此值来检测实数的格式。

setRealNumberPrecision(precision)#
参数:

precision – int

将实数的精度设置为 precision。此值描述 QTextStream 生成实数时应写入的小数位数(FixedNotationScientificNotation),或最大有效数字位数(SmartNotation)。

精度不能是负值。默认值为 6。

setStatus(status)#
参数:

statusStatus

将文本流的状设置为给定的 status

在调用 resetStatus() 之前,对 setStatus() 的后续调用将被忽略。

skipWhiteSpace()#

读取并忽略流中的空格,直到检测到非空格字符或 atEnd() 返回 true。此函数在逐字符读取流时很有用。

空白字符是指那些使 isSpace() 返回 true 的所有字符。

另请参阅

operator>>()

status()#
返回类型:

Status

返回文本流的状。

string()#
返回类型:

str

返回分配给 QTextStream 的当前字符串,如果没有分配字符串,则返回 None

另请参阅

setString() device()