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支持流式传输到QStrings、QByteArrays 和 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 –
QByteArrayopenMode –
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()