首页 > 解决方案 > 将结果保存到 csv 文件:TypeError: writerows() 参数必须是可迭代的

问题描述

我使用 NLTK 提取了一个名称列表(不完美但还可以)。我想将这些保存到 csv 文件,但不断收到错误消息:

TypeError: writerows() argument must be iterable 

这是我的代码:

def get_human_names(text):
    tokens = nltk.tokenize.word_tokenize(text)
    pos = nltk.pos_tag(tokens)
    sentt = nltk.ne_chunk(pos)
    person_list = []
    person = []
    name = ""
    for subtree in sentt.subtrees(filter=lambda t: t.label() == 'PERSON'):
        for leaf in subtree.leaves():
            person.append(leaf[0])
        if len(person) > 1: #avoid grabbing lone surnames
            for part in person:
                name += part + ' '
            if name[:-1] not in person_list:
                person_list.append(name[:-1])
            name = ''
        person = []

    return (person_list)


def first_and_last_names(text):
    n = get_human_names(text)
    for name in n: 
        last_first = HumanName(name).last + ', ' + HumanName(name).first
       print(last_first)   

names = first_and_last_names(text)

Grayling, Chris
Hannant, Ruth
General, 
Services, Peter
Bogan, Gary
Parnership, Rail

import csv
with open('westtrannames.csv', 'w') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerows(names)
csvFile.close()

我想要一个 csv 文件,其中一行用于名字,第二行用于姓氏。另外,我如何将进一步的结果附加到同一个文件中?

标签: python-3.xcsvnltk

解决方案


几个变化。

def first_and_last_names(text):
    n = get_human_names(text)
    result = []
    for name in n: 
        last_first = HumanName(name).last + ', ' + HumanName(name).first
        print(last_first)
        result.append([last_first])    #Append last_name to a list
    return result                    #Return list

names = first_and_last_names(text)

import csv
with open('westtrannames.csv', 'w') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerows(names)          #Names should be a list now. 

推荐阅读