PySide6.QtCore.QTextStream¶
- class QTextStream¶
QTextStream
类为读写文本提供了一个方便的接口。更多…概要¶
方法¶
def
__init__()
def
atEnd()
def
device()
def
encoding()
def
fieldAlignment()
def
fieldWidth()
def
flush()
def
integerBase()
def
locale()
def
numberFlags()
def
__lshift__()
def
__rshift__()
def
padChar()
def
pos()
def
read()
def
readAll()
def
readLine()
def
readLineInto()
def
reset()
def
resetStatus()
def
seek()
def
setDevice()
def
setEncoding()
def
setFieldWidth()
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 的缓冲区,并且QTextStream
使用QStringConverter
来自动支持不同的编码。默认情况下,使用 UTF-8 进行读写,但你也可以通过调用setEncoding()
来设置编码。还支持自动 Unicode 检测。当启用此功能时(默认行为),QTextStream
将检测 UTF-8、UTF-16 或 UTF-32 BOM(字节顺序标记),并在读取时切换到适当的 UTF 编码。QTextStream
默认情况下不写入 BOM,但你可以通过调用setGenerateByteOrderMark
(true) 来启用此功能。当QTextStream
直接在QString
上操作时,编码功能将被禁用。读取文本文件时,使用
QTextStream
有三种常见方式:逐块读取,通过调用
readLine()
或readAll()
。逐字逐句。
QTextStream
支持流式传输到QString
s、QByteArray
s 和 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++库中的
一样,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
) 此枚举指定了可以设置的各种标志,以影响整数、float
和double
的输出。常量
描述
QTextStream.ShowBase
如果基数是16(“0x”)、8(“0”)或2(“0b”),则显示基数作为前缀。
QTextStream.ForcePoint
始终在数字中放置小数点分隔符,即使没有小数部分。
QTextStream.ForceSign
始终在数字前显示符号,即使是正数。
QTextStream.UppercaseBase
使用大写版本的基础前缀(“0X”,“0B”)。
QTextStream.UppercaseDigits
使用大写字母表示10到35的数字,而不是小写字母。
另请参阅
- __init__()¶
构造一个
QTextStream
。在您可以使用它进行读取或写入之前,您必须分配一个设备或字符串。另请参阅
setDevice()
setString()
- __init__(device)
- Parameters:
设备 –
QIODevice
构造一个在
device
上操作的QTextStream
。- __init__(array[, openMode=QIODeviceBase.OpenModeFlag.ReadWrite])
- Parameters:
array –
QByteArray
openMode –
OpenModeFlag
的组合
构造一个
QTextStream
,它在array
上操作,使用openMode
来定义打开模式。在内部,数组由QBuffer
包装。- atEnd()¶
- Return type:
布尔
如果没有更多数据可以从
QTextStream
中读取,则返回true
;否则返回false
。这与调用atEnd()
类似,但并不完全相同,因为QTextStream
还会考虑其内部的Unicode缓冲区。- autoDetectUnicode()¶
- Return type:
布尔
如果启用了自动Unicode检测,则返回
true
,否则返回false
。默认情况下,自动Unicode检测是启用的。返回与
QTextStream
关联的当前设备,如果未分配设备,则返回None
。另请参阅
返回当前分配给流的编码。
- fieldAlignment()¶
- Return type:
返回当前字段的对齐方式。
- fieldWidth()¶
- Return type:
整数
返回当前字段宽度。
另请参阅
- flush()¶
刷新任何等待写入设备的缓冲数据。
如果
QTextStream
操作的是一个字符串,这个函数不会执行任何操作。- generateByteOrderMark()¶
- Return type:
布尔
如果
QTextStream
在使用UTF编码时设置为生成UTF BOM(字节顺序标记),则返回true
;否则返回false
。UTF BOM生成默认设置为false。- integerBase()¶
- Return type:
整数
返回当前整数的基数。0 表示在读取时检测基数,或在生成数字时使用 10(十进制)。
另请参阅
setIntegerBase()
number()
numberFlags()
返回此流的区域设置。默认区域设置为C。
另请参阅
- numberFlags()¶
- Return type:
NumberFlag
的组合
返回当前的数字标志。
- __lshift__(ch)¶
- Parameters:
ch –
QChar
- Return type:
将字符
c
写入流,然后返回对QTextStream
的引用。另请参阅
- __lshift__(s)
- Parameters:
s –
QLatin1String
- Return type:
- __lshift__(s)
- Parameters:
s – 字符串
- Return type:
这是一个重载函数。
将
string
写入流,并返回对QTextStream
的引用。- __lshift__(m)
- Parameters:
- Return type:
- __lshift__(ch)
- Parameters:
ch – 整数
- Return type:
这是一个重载函数。
将
c
从 ASCII 转换为QChar
,然后将其写入流中。- __lshift__(array)
- Parameters:
数组 –
QByteArray
- Return type:
这是一个重载函数。
将
array
写入流中。array
的内容通过fromUtf8()
进行转换。- __lshift__(node)
- Parameters:
节点 –
QDomNode
- Return type:
- __lshift__(s)
- Parameters:
s – 字符串
- Return type:
将字符串
string
写入流,并返回对QTextStream
的引用。在写入流之前,字符串首先使用指定的编码(默认为 UTF-8)进行编码。- __lshift__(f)
- Parameters:
f – 浮点数
- Return type:
这是一个重载函数。
将双精度浮点数
f
写入流中。- __lshift__(i)
- Parameters:
i – 整数
- Return type:
这是一个重载函数。
将带符号的长整型
i
写入流中。- __lshift__(i)
- Parameters:
i – 整数
- Return type:
这是一个重载函数。
将无符号长整型
i
写入流中。- __rshift__(array)¶
- Parameters:
数组 –
QByteArray
- Return type:
这是一个重载函数。
将单词转换为UTF-8,然后将其存储在
array
中。另请参阅
toLatin1()
- padChar()¶
- Return type:
QChar
返回当前的填充字符。
- pos()¶
- Return type:
整数
返回与流的当前位置对应的设备位置,如果发生错误(例如,如果没有设备或字符串,或者设备出现错误),则返回-1。
因为
QTextStream
是缓冲的,这个函数可能需要查找设备以重建有效的设备位置。这个操作可能会很昂贵,因此你可能希望避免在紧密循环中调用这个函数。另请参阅
- read(maxlen)¶
- Parameters:
maxlen – 整数
- Return type:
字符串
从流中最多读取
maxlen
个字符,并返回读取的数据作为QString
。另请参阅
- readAll()¶
- Return type:
字符串
读取流的全部内容,并将其作为
QString
返回。在处理大文件时避免使用此函数,因为它会消耗大量内存。如果您不知道有多少数据可用,调用
readLine()
会更好。另请参阅
- readLine([maxlen=0])¶
- Parameters:
maxlen – 整数
- Return type:
字符串
从流中读取一行文本,并将其作为
QString
返回。允许的最大行长度设置为maxlen
。如果流中包含超过此长度的行,则这些行将在maxlen
字符后分割并分部分返回。如果
maxlen
为 0,行的长度可以是任意的。返回的行没有尾随的换行符(”\n” 或 “\r\n”),因此调用
trimmed()
可能是不必要的。如果流已经读取到文件末尾,readLine() 将返回一个空的
QString
。对于字符串或支持它的设备,你可以使用atEnd()
显式测试流是否结束。另请参阅
- readLineInto(line[, maxlen=0])¶
- Parameters:
line – str
maxlen – int
- Return type:
布尔
从流中读取一行文本到
line
。如果line
是None
,则读取的行不会被存储。允许的最大行长度设置为
maxlen
。如果流中包含超过此长度的行,则这些行将在maxlen
字符后分割并分部分返回。如果
maxlen
为 0,行的长度可以是任意的。结果行没有尾随的换行符(”\n” 或 “\r\n”),因此调用
trimmed()
可能是不必要的。如果
line
有足够的容量来存储即将读取的数据,此函数可能不需要分配新的内存。因此,它可能比readLine()
更快。如果流已读取到文件末尾或发生错误,则返回
false
;否则返回true
。在任何情况下,调用前line
中的内容都会被丢弃。另请参阅
- realNumberNotation()¶
- Return type:
返回当前的实数表示法。
- realNumberPrecision()¶
- Return type:
整数
返回当前的实数精度,或生成实数时
QTextStream
将写入的小数位数(FixedNotation
,ScientificNotation
),或最大有效位数(SmartNotation
)。- reset()¶
重置
QTextStream
的格式化选项,使其恢复到原始构造状态。设备、字符串和任何缓冲数据保持不变。- resetStatus()¶
重置文本流的状态。
另请参阅
- seek(pos)¶
- Parameters:
pos – 整数
- Return type:
布尔
尝试定位到设备中的位置
pos
。成功时返回true
;否则返回false
。- setAutoDetectUnicode(enabled)¶
- Parameters:
enabled – 布尔值
如果
enabled
为真,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)¶
- Parameters:
对齐方式 –
FieldAlignment
设置字段对齐方式为
mode
。当与setFieldWidth()
一起使用时,此函数允许您生成格式化的输出,文本可以左对齐、右对齐或居中对齐。- setFieldWidth(width)¶
- Parameters:
width – 整数
将当前字段宽度设置为
width
。如果width
为0(默认值),则字段宽度等于生成文本的长度。注意
字段宽度适用于调用此函数后附加到此流的每个元素(例如,它也填充endl)。这种行为与STL中的类似类不同,在STL中,字段宽度仅适用于下一个元素。
另请参阅
- setGenerateByteOrderMark(generate)¶
- Parameters:
generate – 布尔值
如果
generate
为真且使用了UTF编码,QTextStream
将在任何数据写入设备之前插入BOM(字节顺序标记)。如果generate
为假,则不会插入BOM。此函数必须在写入任何数据之前调用。否则,它将不执行任何操作。另请参阅
generateByteOrderMark()
bom()
- setIntegerBase(base)¶
- Parameters:
base – 整数
设置整数的基数为
base
,用于读取和生成数字。base
可以是2(二进制)、8(八进制)、10(十进制)或16(十六进制)。如果base
为0,QTextStream
将尝试通过检查流上的数据来检测基数。在生成数字时,QTextStream
假定基数为10,除非已明确设置基数。另请参阅
integerBase()
number()
setNumberFlags()
设置此流的区域设置为
locale
。指定的区域设置用于数字与其字符串表示之间的转换。默认的区域设置是C,这是一个特殊情况 - 出于向后兼容性的原因,不使用千位分组分隔符。
另请参阅
- setNumberFlags(flags)¶
- Parameters:
flags –
NumberFlag
的组合
将当前数字标志设置为
flags
。flags
是来自NumberFlag
枚举的一组标志,描述了生成代码的格式化选项(例如,是否总是写入数字的基数或符号)。- setPadChar(ch)¶
- Parameters:
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 -= 1
另请参阅
- setRealNumberNotation(notation)¶
- Parameters:
符号 –
RealNumberNotation
将实数表示法设置为
notation
(SmartNotation
、FixedNotation
、ScientificNotation
)。在读取和生成数字时,QTextStream
使用此值来检测实数的格式。- setRealNumberPrecision(precision)¶
- Parameters:
精度 – int
设置实数的精度为
precision
。该值描述了QTextStream
在生成实数时应写入的小数位数(FixedNotation
,ScientificNotation
),或最大有效位数(SmartNotation
)。精度不能为负值。默认值为6。
将文本流的状态设置为给定的
status
。在调用
resetStatus()
之前,后续对setStatus()的调用将被忽略。另请参阅
- skipWhiteSpace()¶
从流中读取并丢弃空白字符,直到检测到非空白字符或
atEnd()
返回true。此函数在逐字符读取流时非常有用。空白字符是指所有
isSpace()
返回true
的字符。另请参阅
operator>>()
返回文本流的状态。
另请参阅
- string()¶
- Return type:
字符串
返回当前分配给
QTextStream
的字符串,如果未分配任何字符串,则返回None
。另请参阅
setString()
device()