如何在列表中插入文件中的单词?

How to insert the words of a file in a list?

我在 Python 中编程,我有下一个功能:

def devPalabras(nombreF):
    """Receive a file and returns each word in the file
        syntax: palabra.devPalabras(<fichero.txt>)"""

    if str(nombreF):
        file=open(nombreF,'r')
    else:
        return -1
    data = file.readlines()
    contador = 0
    for renglon in data:
        for palabra in renglon.split(' '):
            contador+=1
            print palabra

我在主程序中调用函数为:

palabras = [] #Create a empty list of words
for palabra in devPalabras("palabras.txt"):
    palabras.append(palabra)

最后,我想打印这个列表:

print palabras

好吧,我在编译程序时遇到下一个错误:

TypeError: 'NoneType' object is not iterable

我该如何解决这个问题?

除了 return -1 之外,您没有 return 任何结果,因此默认调用 devPalabras("palabras.txt") returns None

你可以做的是创建一个列表,比方说 listOfPalabras,每次你打印 palabra,将它添加到列表中:

listOfPalabras = [] # creates a list

for renglon in data:
    for palabra in renglon.split(' '):
        contador+=1
        listOfPalabras.append(palabra) # add each element you want to the list

在函数的最后,你可以return列表:

return listOfPalabras

您的代码中有几个问题。 1) 你的 devPalabras 功能正常 returns None。如果您不 return 函数中的任何内容,则这是默认值。

2) if str(nombreF) 不是检查它是否为字符串的正确方法。使用 isinstance(nombreF, str)

3) 当您的函数 return 为 -1 时,稍后迭代将遇到问题。改为引发异常。

4) 简单地用 ' ' 分隔行将导致最后一个单词以换行符结尾。删除此换行符。

我相信这就是您要找的:

def devPalabras(nombreF):
    """Receive a file and returns each word in the file
    syntax: palabra.devPalabras(<fichero.txt>)"""

    file=open(nombreF,'r')
    data = file.readlines()
    contador = 0
    for renglon in data:
        for palabra in renglon.split(' '):
            contador+=1
            yield palabra.strip()

palabras = [] #Create a empty list of words
for palabra in devPalabras("palabras.txt"):
    palabras.append(palabra)