- class QTextStream#
QTextStream
类提供了一个方便的接口,用于读取和写入文本。《更多》…摘要#
方法#
def
__init__()
def
atEnd()
def
device()
def
encoding()
def
fieldAlignment()
def
fieldWidth()
def
flush()
定义
locale()
定义
__lshift__()
定义
__rshift__()
定义
padChar()
定义
pos()
定义
read()
定义
readAll()
定义
readLine()
定义
reset()
定义
seek()
定义
setDevice()
def
setIntegerBase()
def
setLocale()
def
setNumberFlags()
def
setPadChar()
def
setStatus()
def
skipWhiteSpace()
def
status()
def
string()
注释
本文档可能包含自动从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
支持输出到QString
、QByteArray
和 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()
来设置表示法(SmartNotation
,ScientificNotation
,FixedNotation
)和生成的数字的位数精度。还可以通过setNumberFlags()
获取一些额外的数字格式选项。类似于标准 C++ 库中的
<iostream>
,QTextStream
也定义了几个全局操纵器函数。此外,Qt提供了三个带参数的全局操作符:
qSetFieldWidth()
、qSetPadChar()
和qSetRealNumberPrecision()
。- class RealNumberNotation#
此枚举指定用于以字符串形式表达
float
和double
所用的表示法。常量
描述
QTextStream.ScientificNotation
科学记数法(来自
printf()
的%e
标志)。QTextStream.FixedNotation
定点表示法(来自
printf()
的%f
标志)。QTextStream.SmartNotation
科学或定点表示法,具体情况取决于哪种表示法更具意义(来自
printf()
的%g
标志)。
- class FieldAlignment#
此枚举指定当字段宽度大于占位文本时如何对字段中的文本进行对齐。
常量
描述
QTextStream.AlignLeft
在字段的右边进行填充。
QTextStream.AlignRight
在字段的左边进行填充。
QTextStream.AlignCenter
在字段的两侧进行填充。
QTextStream.AlignAccountingStyle
与AlignRight相同,除了数字的符号左对齐。
另请参阅
- class Status#
此枚举描述文本流的当前状态。
常量
描述
QTextStream.Ok
文本流操作正常。
QTextStream.ReadPastEnd
文本流已读取到底层数据的末尾。
QTextStream.ReadCorruptData
文本流已读取损坏的数据。
QTextStream.WriteFailed
文本流不能写入到底层数据设备。
另请参阅
- class NumberFlag#
(继承自
enum.Flag
)此枚举指定可以设置的多个标志,这些标志将影响整数、浮点数和双精度浮点数的输出。常量
描述
QTextStream.ShowBase
如果基数是16("0x")、8("0")或2("0b"),则将基数作为前缀显示。
QTextStream.ForcePoint
始终在数字中使用小数分隔符,即使没有小数。
QTextStream.ForceSign
始终在数字中使用符号,即使对于正数。
QTextStream.UppercaseBase
使用基数前缀的大写版本("0X","0B")。
QTextStream.UppercaseDigits
使用大写字母来表达10至35的数字,而不是小写。
另请参阅
- __init__(array[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])#
- 参数:
array –
QByteArray
openMode –
OpenModeFlag
组合
构建一个在
array
上操作的QTextStream
,使用openMode
定义打开模式。内部,数组被一个QBuffer
包装。- __init__()
构建一个
QTextStream
。在您可以使用它进行读取或写入之前,必须分配一个设备或字符串。另请参阅
setDevice()
setString()
- __init__(device)
- 参数:
device –
QIODevice
构建一个在
device
上操作的QTextStream
。- atEnd()#
- 返回类型:
bool
如果从
QTextStream
中没有更多的数据可读,则返回true
;否则返回false
。这类似于调用atEnd()
,但QTextStream
还会考虑其内部 Unicode 缓冲区。- autoDetectUnicode()#
- 返回类型:
bool
如果启用自动Unicode检测,则返回
true
,否则返回false
。自动Unicode检测默认启用。返回与
QTextStream
关联的当前设备,如果没有分配设备则返回None
。另请参阅
返回当前分配给流的编码。
返回当前的字段对齐方式。
- fieldWidth()#
- 返回类型:
int
返回当前的字段宽度。
另请参阅
- flush()#
刷新任何等待写入设备的缓冲数据。
如果
QTextStream
在字符串上操作,则此函数不执行任何操作。- generateByteOrderMark()#
- 返回类型:
bool
如果在使用UTF编码时将
QTextStream
设置为生成UTF BOM(字节顺序标记),则返回true
;否则返回false
。UTF BOM的生成默认设置为false。- integerBase()#
- 返回类型:
int
返回当前整数的基数。0表示在读取时检测到的基数,或者在生成数字时为10(十进制)。
另请参阅
setIntegerBase()
number()
numberFlags()
返回此流的区域设置。默认区域设置是C。
另请参阅
- numberFlags()#
- 返回类型:
是
NumberFlag
的组合。
返回当前的数字标志。
- __lshift__(ch)#
- 参数:
ch –
QChar
- 返回类型:
将字符
c
写入流,然后返回QTextStream
的引用。另请参阅
- __lshift__(i)
- 参数:
i – int
- 返回类型:
这是一个重载函数。
将无符号长整型
i
写入流。- __lshift__(i)
- 参数:
i – int
- 返回类型:
这是一个重载函数。
将有符号长整型
i
写入流。- __lshift__(f)
- 参数:
f – float
- 返回类型:
这是一个重载函数。
将双精度浮点数
f
写入流。- __lshift__(s)
- 参数:
s – 字符串
- 返回类型:
将字符串
string
写入流,并返回QTextStream
的引用。在写入流之前,该字符串使用分配的编码(默认为UTF-8)进行编码。- __lshift__(arg__2)
- 参数:
arg__2 –
QDomNode
- 返回类型:
- __lshift__(array)
- 参数:
array –
QByteArray
- 返回类型:
这是一个重载函数。
将
array
写入流。使用fromUtf8()
将array
的内容进行转换。- __lshift__(ch)
- 参数:
ch – int
- 返回类型:
这是一个重载函数。
将 ASCII 编码的
c
转换为QChar
对象,然后将其写入流。- __lshift__(m)
- 参数:
- 返回类型:
- __lshift__(s)
- 参数:
s – 字符串
- 返回类型:
这是一个重载函数。
将
string
写入流,并返回对QTextStream
的引用。- __lshift__(s)
- 参数:
s –
QLatin1String
- 返回类型:
- __rshift__(array)#
- 参数:
array –
QByteArray
- 返回类型:
这是一个重载函数。
将字转换为 UTF-8,然后存储在
array
中。另请参阅
toLatin1()
- padChar()#
- 返回类型:
QChar
返回当前填充字符。
- pos()#
- 返回类型:
int
返回与流当前位置相对应的设备位置,或者出错时返回 -1(例如,如果没有设备或字符串,或者设备出现错误)。
因为
QTextStream
是缓冲的,此函数可能需要搜索设备以重建有效的设备位置。此操作可能非常昂贵,因此您可能想在紧密循环中避免调用此函数。另请参阅
- read(maxlen)#
- 参数:
maxlen – int
- 返回类型:
str
从流中读取最多
maxlen
个字符,并将读取的数据作为QString
返回。另请参阅
- readAll()#
- 返回类型:
str
读取流的全部内容,并以
QString
返回。在处理大文件时避免使用此函数,因为这会消耗大量的内存。当不知道有多少数据可用时,调用
readLine()
比较好。另请参阅
- readLine([maxlen=0])#
- 参数:
maxlen – int
- 返回类型:
str
从流中读取一行文本,并以
QString
返回。允许的最大行长度设置为maxlen
。如果流中的行超过这个长度,则会在此maxlen
字符后分割行并部分返回。如果
maxlen
为 0,则行可以是任意长度。返回的行没有尾随的换行符(”\n” 或 “\r\n”),因此调用
trimmed()
可能是不必要的。如果流已读到文件的末尾,readLine() 将返回一个空
QString
。对于字符串,或对于支持此特性的设备,您可以使用atEnd()
显式测试流的末尾。另请参阅
- readLineInto(line[, maxlen=0])#
- 参数:
line – str
maxlen – int
- 返回类型:
bool
从流中读取一行文本到
line
中。如果line
为None
,则不会存储读取的行。允许的最大行长度设置为
maxlen
。如果流中的行超过这个长度,则会在此maxlen
字符后分割行并部分返回。如果
maxlen
为 0,则行可以是任意长度。生成的行没有尾随的换行符(”\n” 或 “\r\n”),因此调用
trimmed()
可能是不必要的。如果
line
有足够的空间接收即将读取的数据,此函数可能不需要分配新的内存。正因为如此,它可能比readLine()
快。如果流已读到文件末尾或发生错误,则返回
false
;否则返回true
。在任何情况下,调用之前line
中的内容都将被舍弃。另请参阅
- realNumberNotation()#
- 返回类型:
返回当前实数表示法。
- realNumberPrecision()#
- 返回类型:
int
返回当前实数精度,即
QTextStream
在生成实数时(FixedNotation
,ScientificNotation
)将写入的小数位数,或最大有效数字位数(SmartNotation
)。- reset()#
重置
QTextStream
的格式化选项,使其恢复到初始构建状态。设备、字符串和任何缓冲数据保持不变。- resetStatus()#
重置文本流的当前状态。
另请参阅
- 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 检测。将当前设备设置为
device
。如果设备已被分配,QTextStream
将在替换旧设备之前调用flush()
。将此流的编码设置为
encoding
。编码用于解码从分配的设备中读取的任何数据,以及编码要写入的任何数据。默认情况下,使用Utf8
,并启用自动 Unicode 检测。如果
QTextStream
在字符串上操作,则此函数不执行任何操作。警告
如果在从打开的顺序套接字读取文本流时调用此函数,内部缓冲区可能仍然包含使用旧编码解码的文本。
- setFieldAlignment(alignment)#
- 参数:
alignment –
FieldAlignment
将域对齐设置为
mode
。当与setFieldWidth()
一起使用时,此函数允许您生成左对齐、右对齐或居中对齐的格式化输出。- setFieldWidth(width)#
- 参数:
width – int
将当前字段宽度设置为
width
。如果width
为 0(默认值),则字段宽度等于生成的文本长度。注释
此字段宽度应用于在此函数被调用后附加到此流的每个元素(例如,它还会填充 endl)。这种表现与 STL 中的类似类不同,其中字段宽度仅应用于下一个元素。
另请参阅
- setGenerateByteOrderMark(generate)#
- 参数:
generate – bool
如果
generate
为 true 且使用了 UTF 编码,QTextStream
将在写入设备之前插入 BOM(字节顺序标记)。如果generate
为 false,则不会插入 BOM。必须在写入任何数据之前调用此函数。否则,不会执行任何操作。另请参阅
generateByteOrderMark()
bom()
- setIntegerBase(base)#
- 参数:
base – int
设置整数的基数为
可以是2(二进制)、8(八进制)、10(十进制)或16(十六进制)。如果《code class="docutils literal notranslate">base为0,《a class="reference internal" href="#PySide6.QtCore.QTextStream" title="PySide6.QtCore.QTextStream">base
,既用于读取也用于生成数字。《code class="docutils literal notranslate">baseQTextStream
将通过检查流中的数据尝试检测基数。在生成数字时,《a class="reference internal" href="#PySide6.QtCore.QTextStream" title="PySide6.QtCore.QTextStream">QTextStream
假定为10,除非已经显式设置了基数。另请参阅
integerBase()
number()
setNumberFlags()
将此流的区域设置为
locale
。指定的区域用于数字与它们的字符串表示之间的转换。默认区域为C,它是一个特殊案例 - 由于向后兼容性原因,不使用千位分隔符。
另请参阅
- setNumberFlags(flags)#
- 参数:
flags – 组合了
NumberFlag
设置当前数字标志为
flags
。`flags`是一组来自`NumberFlag`枚举的标志,并描述了生成代码的格式化选项(例如,是否总写入数字的基数或符号)。- setPadChar(ch)#
- 参数:
ch –
QChar
警告
本节包含自动从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
另请参阅
- setRealNumberNotation(notation)#
- 参数:
notation –
RealNumberNotation
将实数表示法设置为
notation
(SmartNotation
,FixedNotation
,ScientificNotation
)。在读取和生成数字时,QTextStream
使用此值来检测实数的格式。- setRealNumberPrecision(precision)#
- 参数:
precision – int
将实数的精度设置为
precision
。此值描述QTextStream
生成实数时应写入的小数位数(FixedNotation
,ScientificNotation
),或最大有效数字位数(SmartNotation
)。精度不能是负值。默认值为 6。
将文本流的状设置为给定的
status
。在调用
resetStatus()
之前,对setStatus()
的后续调用将被忽略。另请参阅
- skipWhiteSpace()#
读取并忽略流中的空格,直到检测到非空格字符或
atEnd()
返回 true。此函数在逐字符读取流时很有用。空白字符是指那些使
isSpace()
返回 true 的所有字符。另请参阅
operator>>()
返回文本流的状。
- string()#
- 返回类型:
str
返回分配给
QTextStream
的当前字符串,如果没有分配字符串,则返回None
。另请参阅
setString()
device()