【问题标题】:Saving results to csv file: TypeError: writerows() argument must be iterable将结果保存到 csv 文件:TypeError: writerows() 参数必须是可迭代的
【发布时间】:2019-08-09 08:49:02
【问题描述】:

我使用 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.x csv nltk


    【解决方案1】:

    几个变化。

    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. 
    

    【讨论】:

    • 谢谢,我不再收到错误,它会写入 csv。但它在单个单元格中打印每个字符,即 C H R I S G R A Y L I N G - 所有字符都在单独的单元格中进行。有没有一行代码可以解决这个问题?
    • 原题里有一些打印
    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2019-06-19
    相关资源
    最近更新 更多