【问题标题】:Python - The '.split' function is not working correctlyPython - '.split' 函数无法正常工作
【发布时间】:2019-03-05 08:00:36
【问题描述】:

最近,我开始创建一个程序,我可以编写和记录我必须做的工作,以保持对我已经完成的工作和仍然需要完成的工作的控制。但是,我现在有个大问题,就是程序可以读取已经发送到记录所有内容的文本文件中的数据,但不能使用'.split'函数。

这部分程序的代码如下:

def dialog3():
    document = open('homework.txt','r+')
    doc2 = document.readlines()
    print(doc2)
    doc3 = doc2.split(['\n'])
    btn.configure(state=DISABLED)
    btn2.configure(state=DISABLED)
    btn3.configure(state=DISABLED)

以及以下错误消息:

    doc3 = doc2.split(['\n'])
    AttributeError: 'list' object has no attribute 'split'

【问题讨论】:

标签: python


【解决方案1】:

假设你有一个看起来像这样的文件-

abc def ged

adw ret qwer tre....

等等

现在,当我执行 readlines 时,指向文件对象的光标将位于第一行。如果我这样做,file.readlines.split(' ') 将在第一行返回单词列表...readline.split('\n') 将返回第一个线本身。

由于每一行已经被分割成换行符,所以它会返回同一行

【讨论】:

  • @FlyingTeller 谢谢你的收获!...意味着分裂
  • 您的意思可能是file.readline().split(' ')。在没有() 的情况下使用readlines 会引发错误,而执行file.readlines().split(' ') 基本上是OP 正在尝试的,这也是不正确的
【解决方案2】:
doc2 = document.readlines()
print(doc2)
doc3 = doc2.split(['\n'])

doc2type() 已经是一个数组,因为 file.readlines() 总是返回文件中的行数组。您不能简单地拆分数组。从您的问题来看,您的文件可能有 \n 转义字符,因此这也会在数组中被捕获。

【讨论】:

    【解决方案3】:

    readlines() 函数返回一个列表,因此您无需再次将其拆分为行。

    如果你需要进一步拆分它,你可以做类似的事情

    flatten = lambda l: [item for sublist in l for item in sublist]
    doc3=flatten([l.split('\n') for l in doc2])
    

    【讨论】: