使用 QTextStream 读取字符串的第一行

Posted

技术标签:

【中文标题】使用 QTextStream 读取字符串的第一行【英文标题】:Use QTextStream to read the first line in a string 【发布时间】:2013-12-05 13:39:08 【问题描述】:

如何使用QTextStream 读取字符串的第一行(之前从文件中读取)?

streamin = QTextStream(str)
line = streamin.readLine()

这段代码好像不行。

【问题讨论】:

添加一些上下文(更多代码),你不会在这里遇到oracle,它能够说出你做错了什么。 再次,就像 Marek 建议的那样,请更正您的语法并发布真实代码。 【参考方案1】:

QTextStream 类不直接接受 python 字符串。对于 PyQt5,您必须先将字符串转换为 QByteArray:

>>> s = """\
... First Line
... Second Line
... Third Line
... """
>>> ba = QtCore.QByteArray(s.encode('utf-8'))
>>> ts = QtCore.QTextStream(ba)
>>> ts.setCodec('utf-8')
>>> ts.readLine()
'First Line'

【讨论】:

接受的答案证明你应该写 str 是 python 字符串。无论如何,这个答案有点复杂,@ 987654323@。所以修复你的代码就足够了:streamin = QTextStream(QString(str)) @MarekR。您错过了 OP 正在使用 PyQt5。 PyQt5 中没有 QString,因此只能将 QIODevice 或 QByteArray 传递给 QTextStream 构造函数。当然,您的建议适用于 PyQt4。就个人而言,我会避免所有的复杂情况,并使用 python 的io 模块来处理这种事情。【参考方案2】:

我基本上会从Qt Documentation Site 发布一个sn-p 代码。

更好的是...这里也有来自*** 的内容。

// Instead of feeding in stdin, you can feed in QFile - i.e. QIODevice
QFile file("myfile");
// ... open file etc etc
QTextStream stream(&file);
QString line;
line = stream.readLine();

【讨论】:

很好,但我想从字符串而不是文件中获取第一行。

以上是关于使用 QTextStream 读取字符串的第一行的主要内容,如果未能解决你的问题,请参考以下文章

在不使用专用计数器的情况下检查 QTextStream 读取的总行数

只读取文件的第一行?

JDBC ODBC 和 4D 数据库:读取一行时,不发送列的第一个空格字符

java导出合并excel单元格时,导出的第一行可以显示出标题,第二行就先不出来是怎么回事?

JAVA 字节流和字符流度读写的区别

使用 QTextStream 反序列化?