如何读取/打印(_io.TextIOWrapper)数据?

Posted

技术标签:

【中文标题】如何读取/打印(_io.TextIOWrapper)数据?【英文标题】:How to read/print the ( _io.TextIOWrapper) data? 【发布时间】:2017-09-12 07:02:33 【问题描述】:

我想使用以下代码 > 打开文件 > 读取内容并去除不需要的行 > 然后将数据写入文件并读取文件以进行下游分析。

with open("chr2_head25.gtf", 'r') as f,\
    open('test_output.txt', 'w+') as f2:
    for lines in f:
        if not lines.startswith('#'):
            f2.write(lines)
    f2.close()

现在,我想读取 f2 数据并在 pandas 或其他模块中进行进一步处理,但在读取数据时遇到了问题(f2)。

data = f2 # doesn't work
print(data) #gives
<_io.TextIOWrapper name='test_output.txt' mode='w+' encoding='UTF-8'>

data = io.StringIO(f2)  # doesn't work
# Error message
Traceback (most recent call last):
  File "/home/everestial007/PycharmProjects/stitcher/pHASE-Stitcher-Markov/markov_final_test/phase_to_vcf.py", line 64, in <module>
data = io.StringIO(f2)
TypeError: initial_value must be str or None, not _io.TextIOWrapper

【问题讨论】:

你能具体一点吗?我尝试在代码的第二行执行f2.read()open(...) as f2.read(),但没有成功。 【参考方案1】:

文件已经关闭(当前一个with 块完成时),所以你不能对文件做更多的事情。要重新打开文件,请创建另一个 with 语句并使用 read 属性来读取文件。

with open('test_output.txt', 'r') as f2:
    data = f2.read()
    print(data)

【讨论】:

我尝试不将f2.close() 放在 for 循环的末尾,但它也不起作用。我已经知道你的建议了。我只是不想一遍又一遍地阅读文件。想知道这些代码是否缺少某些东西。 @everestial007:f2.close() 是多余的,因为前面的 with 会自动执行。 如何将f2 转换为str 对象? @Leevo data 是文件内容的str对象。 @abccd 这个答案是如何使用 io.TextIOWrapper 的?

以上是关于如何读取/打印(_io.TextIOWrapper)数据?的主要内容,如果未能解决你的问题,请参考以下文章

为啥给我这个错误:TypeError: cannot pickle '_io.TextIOWrapper' object?

使用 pexpect 和多处理时出错?错误“TypEerror:无法序列化 '_io.TextIOWrapper' 对象”

AttributeError: ‘_io.TextIOWrapper‘ object has no attribute ‘xreadlines‘

AttributeError: ‘_io.TextIOWrapper‘ object has no attribute ‘xreadlines‘

Python 3:资源警告:未关闭的文件 <_io.TextIOWrapper name='PATH_OF_FILE'

python文件的操作