【问题标题】:Python: AttributeError: '_io.TextIOWrapper' object has no attribute 'split'Python:AttributeError:'_io.TextIOWrapper'对象没有属性'split'
【发布时间】:2018-12-20 18:26:20
【问题描述】:

我有一个文本文件,我们称之为goodlines.txt,我想加载它并创建一个包含文本文件中每一行的列表。

我尝试像这样使用split() 程序:

>>> f = open('goodlines.txt')
>>> mylist = f.splitlines()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: '_io.TextIOWrapper' object has no attribute 'splitlines'
>>> mylist = f.split()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: '_io.TextIOWrapper' object has no attribute 'split'

为什么会出现这些错误?这不是我使用split() 的方式吗? (我使用的是python 3.3.2

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您正在对打开的文件对象使用str 方法。

    您只需在文件对象上调用list() 即可将文件作为行列表读取:

    with open('goodlines.txt') as f:
        mylist = list(f)
    

    确实包含换行符。您可以在列表理解中去掉它们:

    with open('goodlines.txt') as f:
        mylist = [line.rstrip('\n') for line in f]
    

    【讨论】:

      【解决方案2】:

      试试这个:

       >>> f = open('goodlines.txt')
       >>> mylist = f.readlines()
      

      open() 函数返回一个文件对象。而对于文件对象,没有像splitlines()split() 这样的方法。您可以使用dir(f) 来查看文件对象的所有方法。

      【讨论】:

      • 这很好,但我总是在每个结尾处得到这些“\n”的东西......如何在不更改文本文件的情况下删除它们?
      【解决方案3】:

      你不是在阅读文件内容:

      my_file_contents = f.read()
      

      更多信息请见the docs

      您可以在不调用 read()readlines() 的情况下循环您的文件对象:

      f = open('goodlines.txt')
      for line in f:
          print(line)
      

      如果你想要一个列表(没有你问的\n

      my_list = [line.rstrip('\n') for line in f]
      

      【讨论】:

      • 列表推导去除换行符。您也可以直接调用list(f),效果与您当前的代码相同。
      • @samuele-mattiuzzo "my_list = [line for line in f]" 还列出了每个末尾带有 \n 的列表,即使它不在文本文件中。但是阅读时应该拆分工作吗?
      • 正如 Pieters 先生迅速指出的那样,\n 无论如何都需要删除。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 2016-11-08
      • 2014-04-26
      • 2021-01-15
      • 2020-03-09
      • 2013-05-14
      相关资源
      最近更新 更多