The PySide.QtCore.QTextStream class provides a convenient interface for reading and writing text.
PySide.QtCore.QTextStream can operate on a PySide.QtCore.QIODevice , a PySide.QtCore.QByteArray or a PySide.QtCore.QString . Using PySide.QtCore.QTextStream ‘s streaming operators, you can conveniently read and write words, lines and numbers. For generating text, PySide.QtCore.QTextStream supports formatting options for field padding and alignment, and formatting of numbers. Example:
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 "It’s also common to use PySide.QtCore.QTextStream to read console input and write console output. PySide.QtCore.QTextStream is locale aware, and will automatically decode standard input using the correct codec. Example:
stream = QTextStream(sys.stdin.fileno()) while(True): line = stream.readLine() if line.isNull(): break;Note that you cannot use QTextStream.atEnd() , which returns true when you have reached the end of the data stream, with stdin. The reason for this is that as long as stdin doesn’t give any input to the PySide.QtCore.QTextStream , atEnd() will return true even if the stdin is open and waiting for more characters.
Besides using PySide.QtCore.QTextStream ‘s constructors, you can also set the device or string PySide.QtCore.QTextStream operates on by calling PySide.QtCore.QTextStream.setDevice() or PySide.QtCore.QTextStream.setString() . You can seek to a position by calling PySide.QtCore.QTextStream.seek() , and PySide.QtCore.QTextStream.atEnd() will return true when there is no data left to be read. If you call PySide.QtCore.QTextStream.flush() , PySide.QtCore.QTextStream will empty all data from its write buffer into the device and call PySide.QtCore.QTextStream.flush() on the device.
Internally, PySide.QtCore.QTextStream uses a Unicode based buffer, and PySide.QtCore.QTextCodec is used by PySide.QtCore.QTextStream to automatically support different character sets. By default, QTextCodec.codecForLocale() is used for reading and writing, but you can also set the codec by calling PySide.QtCore.QTextStream.setCodec() . Automatic Unicode detection is also supported. When this feature is enabled (the default behavior), PySide.QtCore.QTextStream will detect the UTF-16 or the UTF-32 BOM (Byte Order Mark) and switch to the appropriate UTF codec when reading. PySide.QtCore.QTextStream does not write a BOM by default, but you can enable this by calling setGenerateByteOrderMark(true). When PySide.QtCore.QTextStream operates on a PySide.QtCore.QString directly, the codec is disabled.
There are three general ways to use PySide.QtCore.QTextStream when reading text files:
- Chunk by chunk, by calling PySide.QtCore.QTextStream.readLine() or PySide.QtCore.QTextStream.readAll() .
- Word by word. PySide.QtCore.QTextStream supports streaming into QStrings, QByteArrays and char* buffers. Words are delimited by space, and leading white space is automatically skipped.
- Character by character, by streaming into PySide.QtCore.QChar or char types. This method is often used for convenient input handling when parsing files, independent of character encoding and end-of-line semantics. To skip white space, call PySide.QtCore.QTextStream.skipWhiteSpace() .
Since the text stream uses a buffer, you should not read from the stream using the implementation of a superclass. For instance, if you have a PySide.QtCore.QFile and read from it directly using QFile.readLine() instead of using the stream, the text stream’s internal position will be out of sync with the file’s position.
By default, when reading numbers from a stream of text, PySide.QtCore.QTextStream will automatically detect the number’s base representation. For example, if the number starts with “0x”, it is assumed to be in hexadecimal form. If it starts with the digits 1-9, it is assumed to be in decimal form, and so on. You can set the integer base, thereby disabling the automatic detection, by calling PySide.QtCore.QTextStream.setIntegerBase() . Example:
in_ = QTextStream("0x50 0x20") firstNumber = 0 secondNumber = 0 in_ >> firstNumber # firstNumber == 80 in_ >> dec >> secondNumber # secondNumber == 0 ch = None in_ >> ch # ch == 'x'PySide.QtCore.QTextStream supports many formatting options for generating text. You can set the field width and pad character by calling PySide.QtCore.QTextStream.setFieldWidth() and PySide.QtCore.QTextStream.setPadChar() . Use PySide.QtCore.QTextStream.setFieldAlignment() to set the alignment within each field. For real numbers, call PySide.QtCore.QTextStream.setRealNumberNotation() and PySide.QtCore.QTextStream.setRealNumberPrecision() to set the notation ( SmartNotation , ScientificNotation , FixedNotation ) and precision in digits of the generated number. Some extra number formatting options are also available through PySide.QtCore.QTextStream.setNumberFlags() .
Like <iostream> in the standard C++ library, PySide.QtCore.QTextStream also defines several global manipulator functions:
Manipulator Description bin Same as setIntegerBase(2). oct Same as setIntegerBase(8). dec Same as setIntegerBase(10). hex Same as setIntegerBase(16). showbase Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() | ShowBase ). forcesign Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() | ForceSign ). forcepoint Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() | ForcePoint ). noshowbase Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() & ~ ShowBase ). noforcesign Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() & ~ ForceSign ). noforcepoint Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() & ~ ForcePoint ). uppercasebase Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() | UppercaseBase ). uppercasedigits Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() | UppercaseDigits ). lowercasebase Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() & ~ UppercaseBase ). lowercasedigits Same as setNumberFlags( PySide.QtCore.QTextStream.numberFlags() & ~ UppercaseDigits ). fixed Same as setRealNumberNotation( FixedNotation ). scientific Same as setRealNumberNotation( ScientificNotation ). left Same as setFieldAlignment( AlignLeft ). right Same as setFieldAlignment( AlignRight ). center Same as setFieldAlignment( AlignCenter ). endl Same as operator<<(‘n’) and PySide.QtCore.QTextStream.flush() . flush Same as PySide.QtCore.QTextStream.flush() . reset Same as PySide.QtCore.QTextStream.reset() . ws Same as PySide.QtCore.QTextStream.skipWhiteSpace() . bom Same as setGenerateByteOrderMark(true). In addition, Qt provides three global manipulators that take a parameter: qSetFieldWidth() , qSetPadChar() , and qSetRealNumberPrecision() .
Parameters: |
|
---|
Constructs a PySide.QtCore.QTextStream . Before you can use it for reading or writing, you must assign a device or a string.
See also
PySide.QtCore.QTextStream.setDevice() PySide.QtCore.QTextStream.setString()
Constructs a PySide.QtCore.QTextStream that operates on device .
This enum specifies which notations to use for expressing float and double as strings.
Constant | Description |
---|---|
QTextStream.ScientificNotation | Scientific notation (printf()‘s %e flag). |
QTextStream.FixedNotation | Fixed-point notation (printf()‘s %f flag). |
QTextStream.SmartNotation | Scientific or fixed-point notation, depending on which makes most sense (printf()‘s %g flag). |
This enum specifies various flags that can be set to affect the output of integers, floats, and doubles.
Constant | Description |
---|---|
QTextStream.ShowBase | Show the base as a prefix if the base is 16 (“0x”), 8 (“0”), or 2 (“0b”). |
QTextStream.ForcePoint | Always put the decimal separator in numbers, even if there are no decimals. |
QTextStream.ForceSign | Always put the sign in numbers, even for positive numbers. |
QTextStream.UppercaseBase | Use uppercase versions of base prefixes (“0X”, “0B”). |
QTextStream.UppercaseDigits | Use uppercase letters for expressing digits 10 to 35 instead of lowercase. |
This enum specifies how to align text in fields when the field is wider than the text that occupies it.
Constant | Description |
---|---|
QTextStream.AlignLeft | Pad on the right side of fields. |
QTextStream.AlignRight | Pad on the left side of fields. |
QTextStream.AlignCenter | Pad on both sides of field. |
QTextStream.AlignAccountingStyle | Same as AlignRight , except that the sign of a number is flush left. |
This enum describes the current status of the text stream.
Constant | Description |
---|---|
QTextStream.Ok | The text stream is operating normally. |
QTextStream.ReadPastEnd | The text stream has read past the end of the data in the underlying device. |
QTextStream.ReadCorruptData | The text stream has read corrupt data. |
See also
Return type: | PySide.QtCore.bool |
---|
Returns true if there is no more data to be read from the PySide.QtCore.QTextStream ; otherwise returns false. This is similar to, but not the same as calling QIODevice.atEnd() , as PySide.QtCore.QTextStream also takes into account its internal Unicode buffer.
Return type: | PySide.QtCore.bool |
---|
Returns true if automatic Unicode detection is enabled, otherwise returns false. Automatic Unicode detection is enabled by default.
Return type: | PySide.QtCore.QTextCodec |
---|
Returns the codec that is current assigned to the stream.
Return type: | PySide.QtCore.QIODevice |
---|
Returns the current device associated with the PySide.QtCore.QTextStream , or 0 if no device has been assigned.
Return type: | PySide.QtCore.QTextStream.FieldAlignment |
---|
Returns the current field alignment.
Return type: | PySide.QtCore.int |
---|
Returns the current field width.
Flushes any buffered data waiting to be written to the device.
If PySide.QtCore.QTextStream operates on a string, this function does nothing.
Return type: | PySide.QtCore.bool |
---|
Returns true if PySide.QtCore.QTextStream is set to generate the UTF BOM (Byte Order Mark) when using a UTF codec; otherwise returns false. UTF BOM generation is set to false by default.
Return type: | PySide.QtCore.int |
---|
Returns the current base of integers. 0 means that the base is detected when reading, or 10 (decimal) when generating numbers.
See also
PySide.QtCore.QTextStream.setIntegerBase() QString.number() PySide.QtCore.QTextStream.numberFlags()
Return type: | PySide.QtCore.QLocale |
---|
Returns the locale for this stream. The default locale is C.
Return type: | PySide.QtCore.QTextStream.NumberFlags |
---|
Returns the current number flags.
Parameters: | i – PySide.QtCore.signed long |
---|---|
Return type: | PySide.QtCore.QTextStream |
This is an overloaded function.
Writes the signed long i to the stream.
Parameters: | i – long |
---|---|
Return type: | PySide.QtCore.QTextStream |
This is an overloaded function.
Writes the unsigned long i to the stream.
Parameters: | f – PySide.QtCore.double |
---|---|
Return type: | PySide.QtCore.QTextStream |
This is an overloaded function.
Writes the double f to the stream.
Parameters: | arg__2 – PySide.QtGui.QSplitter |
---|---|
Return type: | PySide.QtCore.QTextStream |
Parameters: | ch – PySide.QtCore.char |
---|---|
Return type: | PySide.QtCore.QTextStream |
This is an overloaded function.
Converts c from ASCII to a PySide.QtCore.QChar , then writes it to the stream.
Parameters: | m – PySide.QtCore.QTextStreamManipulator |
---|---|
Return type: | PySide.QtCore.QTextStream |
Parameters: | ch – PySide.QtCore.QChar |
---|---|
Return type: | PySide.QtCore.QTextStream |
Writes the character c to the stream, then returns a reference to the PySide.QtCore.QTextStream .
Parameters: | c – str |
---|---|
Return type: | PySide.QtCore.QTextStream |
This is an overloaded function.
Writes the constant string pointed to by string to the stream. string is assumed to be in ISO-8859-1 encoding. This operator is convenient when working with constant string data. Example:
out = QTextStream(sys.stdout.fileno())
out << "Qt rocks!" << endl
Warning: PySide.QtCore.QTextStream assumes that string points to a string of text, terminated by a ‘0’ character. If there is no terminating ‘0’ character, your application may crash.
Parameters: | s – unicode |
---|---|
Return type: | PySide.QtCore.QTextStream |
Writes the string string to the stream, and returns a reference to the PySide.QtCore.QTextStream . The string is first encoded using the assigned codec (the default codec is QTextCodec.codecForLocale() ) before it is written to the stream.
Parameters: | array – PySide.QtCore.QByteArray |
---|---|
Return type: | PySide.QtCore.QTextStream |
This is an overloaded function.
Writes array to the stream. The contents of array are converted with QString.fromAscii() .
Parameters: | arg__2 – PySide.QtXml.QDomNode |
---|---|
Return type: | PySide.QtCore.QTextStream |
Parameters: | array – PySide.QtCore.QByteArray |
---|---|
Return type: | PySide.QtCore.QTextStream |
This is an overloaded function.
Converts the word to ISO-8859-1, then stores it in array .
See also
QString.toLatin1()
Parameters: | arg__2 – PySide.QtGui.QSplitter |
---|---|
Return type: | PySide.QtCore.QTextStream |
Return type: | PySide.QtCore.QChar |
---|
Returns the current pad character.
Return type: | PySide.QtCore.qint64 |
---|
Returns the device position corresponding to the current position of the stream, or -1 if an error occurs (e.g., if there is no device or string, or if there’s a device error).
Because PySide.QtCore.QTextStream is buffered, this function may have to seek the device to reconstruct a valid device position. This operation can be expensive, so you may want to avoid calling this function in a tight loop.
See also
Parameters: | maxlen – PySide.QtCore.qint64 |
---|---|
Return type: | unicode |
Reads at most maxlen characters from the stream, and returns the data read as a PySide.QtCore.QString .
Return type: | unicode |
---|
Reads the entire content of the stream, and returns it as a PySide.QtCore.QString . Avoid this function when working on large files, as it will consume a significant amount of memory.
Calling PySide.QtCore.QTextStream.readLine() is better if you do not know how much data is available.
See also
Parameters: | maxlen – PySide.QtCore.qint64 |
---|---|
Return type: | unicode |
Reads one line of text from the stream, and returns it as a PySide.QtCore.QString . The maximum allowed line length is set to maxlen . If the stream contains lines longer than this, then the lines will be split after maxlen characters and returned in parts.
If maxlen is 0, the lines can be of any length. A common value for maxlen is 75.
The returned line has no trailing end-of-line characters (“n” or “rn”), so calling QString.trimmed() is unnecessary.
If the stream has read to the end of the file, PySide.QtCore.QTextStream.readLine() will return a null PySide.QtCore.QString . For strings, or for devices that support it, you can explicitly test for the end of the stream using PySide.QtCore.QTextStream.atEnd() .
Return type: | PySide.QtCore.QTextStream.RealNumberNotation |
---|
Returns the current real number notation.
Return type: | PySide.QtCore.int |
---|
Returns the current real number precision, or the number of fraction digits PySide.QtCore.QTextStream will write when generating real numbers.
Resets PySide.QtCore.QTextStream ‘s formatting options, bringing it back to its original constructed state. The device, string and any buffered data is left untouched.
Resets the status of the text stream.
See also
QTextStream.Status PySide.QtCore.QTextStream.status() PySide.QtCore.QTextStream.setStatus()
Parameters: | pos – PySide.QtCore.qint64 |
---|---|
Return type: | PySide.QtCore.bool |
Seeks to the position pos in the device. Returns true on success; otherwise returns false.
Parameters: | enabled – PySide.QtCore.bool |
---|
If enabled is true, PySide.QtCore.QTextStream will attempt to detect Unicode encoding by peeking into the stream data to see if it can find the UTF-16 or UTF-32 BOM (Byte Order Mark). If this mark is found, PySide.QtCore.QTextStream will replace the current codec with the UTF codec.
This function can be used together with PySide.QtCore.QTextStream.setCodec() . It is common to set the codec to UTF-8, and then enable UTF-16 detection.
Parameters: | codecName – str |
---|
Sets the codec for this stream to the PySide.QtCore.QTextCodec for the encoding specified by codecName . Common values for codecName include “ISO 8859-1”, “UTF-8”, and “UTF-16”. If the encoding isn’t recognized, nothing happens.
Example:
out = QTextStream(file)
out.setCodec("UTF-8")
Parameters: | codec – PySide.QtCore.QTextCodec |
---|
Sets the codec for this stream to codec . The codec is used for decoding any data that is read from the assigned device, and for encoding any data that is written. By default, QTextCodec.codecForLocale() is used, and automatic unicode detection is enabled.
If PySide.QtCore.QTextStream operates on a string, this function does nothing.
Warning
If you call this function while the text stream is reading from an open sequential socket, the internal buffer may still contain text decoded using the old codec.
Parameters: | device – PySide.QtCore.QIODevice |
---|
Sets the current device to device . If a device has already been assigned, PySide.QtCore.QTextStream will call PySide.QtCore.QTextStream.flush() before the old device is replaced.
Note
This function resets locale to the default locale (‘C’) and codec to the default codec, QTextCodec.codecForLocale() .
See also
PySide.QtCore.QTextStream.device() PySide.QtCore.QTextStream.setString()
Parameters: | alignment – PySide.QtCore.QTextStream.FieldAlignment |
---|
Sets the field alignment to mode . When used together with PySide.QtCore.QTextStream.setFieldWidth() , this function allows you to generate formatted output with text aligned to the left, to the right or center aligned.
Parameters: | width – PySide.QtCore.int |
---|
Sets the current field width to width . If width is 0 (the default), the field width is equal to the length of the generated text.
Note
The field width applies to every element appended to this stream after this function has been called (e.g., it also pads endl). This behavior is different from similar classes in the STL, where the field width only applies to the next element.
Parameters: | generate – PySide.QtCore.bool |
---|
If generate is true and a UTF codec is used, PySide.QtCore.QTextStream will insert the BOM (Byte Order Mark) before any data has been written to the device. If generate is false, no BOM will be inserted. This function must be called before any data is written. Otherwise, it does nothing.
See also
Parameters: | base – PySide.QtCore.int |
---|
Sets the base of integers to base , both for reading and for generating numbers. base can be either 2 (binary), 8 (octal), 10 (decimal) or 16 (hexadecimal). If base is 0, PySide.QtCore.QTextStream will attempt to detect the base by inspecting the data on the stream. When generating numbers, PySide.QtCore.QTextStream assumes base is 10 unless the base has been set explicitly.
See also
PySide.QtCore.QTextStream.integerBase() QString.number() PySide.QtCore.QTextStream.setNumberFlags()
Parameters: | locale – PySide.QtCore.QLocale |
---|
Sets the locale for this stream to locale . The specified locale is used for conversions between numbers and their string representations.
The default locale is C and it is a special case - the thousands group separator is not used for backward compatibility reasons.
See also
Parameters: | flags – PySide.QtCore.QTextStream.NumberFlags |
---|
Parameters: | ch – PySide.QtCore.QChar |
---|
Sets the pad character to ch . The default value is the ASCII space character (‘ ‘), or PySide.QtCore.QChar (0x20). This character is used to fill in the space in fields when generating text.
Example:
s = QString()
out = QTextStream(s)
out.setFieldWidth(10)
out.setFieldAlignment(QTextStream::AlignCenter)
out.setPadChar('-')
out << "Qt" << "rocks!"
The string s contains:
----Qt------rocks!--
Parameters: | notation – PySide.QtCore.QTextStream.RealNumberNotation |
---|
Sets the real number notation to notation ( SmartNotation , FixedNotation , ScientificNotation ). When reading and generating numbers, PySide.QtCore.QTextStream uses this value to detect the formatting of real numbers.
Parameters: | precision – PySide.QtCore.int |
---|
Sets the precision of real numbers to precision . This value describes the number of fraction digits PySide.QtCore.QTextStream should write when generating real numbers.
The precision cannot be a negative value. The default value is 6.
Parameters: | status – PySide.QtCore.QTextStream.Status |
---|
Sets the status of the text stream to the status given.
See also
QTextStream.Status PySide.QtCore.QTextStream.status() PySide.QtCore.QTextStream.resetStatus()
Reads and discards whitespace from the stream until either a non-space character is detected, or until PySide.QtCore.QTextStream.atEnd() returns true. This function is useful when reading a stream character by character.
Whitespace characters are all characters for which QChar.isSpace() returns true.
See also
PySide.QtCore.QTextStream.operator>>()
Return type: | PySide.QtCore.QTextStream.Status |
---|
Returns the status of the text stream.
See also
QTextStream.Status PySide.QtCore.QTextStream.setStatus() PySide.QtCore.QTextStream.resetStatus()
Return type: | unicode |
---|
Returns the current string assigned to the PySide.QtCore.QTextStream , or 0 if no string has been assigned.
See also
PySide.QtCore.QTextStream.setString() PySide.QtCore.QTextStream.device()