TypeError: coercing to unicode need string or buffer, list found

TypeError: coercing to unicode need string or buffer, list found

我正在编写代码,需要将 txt 文件中的句子数据集转换为 csv 文件。这是我的代码,它工作正常,将输入的 txt 文件转换为 csv 文件的格式。

但是,我无法制作输出 csv 文件。我是 python 编程的新手,所以我还不知道如何解决它。

这是我的代码:

def txtTOcsv():

output_csv = []

with open("dataset.txt", "r") as myfile:
    lines = myfile.readlines()
    for line in lines:
        row = line.split()
        for i in row[1:]:
            tokens  = (row[0],i)
            print tokens
            output_csv.append(tokens)

with open(output_csv,'w') as out_file:
    csv.writer(out_file)

之前都可以正常工作
print tokens

并按我的意愿打印所有列,中间用逗号分隔。但是当它转到要将输出保存在 csv 文件中的行时。它给出了这个错误:

with open(output_csv,'w') as out_file:
TypeError: coercing to Unicode: need string or buffer, list found

如有任何帮助,我们将不胜感激。谢谢。

output_csv 是一个列表,open() 需要一个文件名。

尝试

with open("output.csv",'w') as out_file:
  csv.writer(out_file).writerows(output_csv)

除了 Tzach 指出的问题外,还有其他几个问题:

  1. 没有理由将文件的所有行读入一个列表。

  2. 无需创建另一个列表来保存所有已处理的行。

如果您处理的文件大小恰好为 5GB,那么您的代码会将该数据复制两次到内存中,这将需要 10GB 的内存。这可能会使您的系统内存不堪重负。

您可以做的是:

  1. 读一行。
  2. 处理行。
  3. 将处理后的行写入csv文件。
  4. 阅读下一行。

这样一来,您一次只能将非常少量的文本读入内存。以下是处理任意大小文件的方法:

import csv

with open("data.txt", newline='') as infile:
    with open('csv3.csv', 'w', newline='') as outfile:
        writer = csv.writer(outfile)

        for line in infile:
            first_word, *words = line.split()

            for word in words:
                 writer.writerow([first_word, word])

这一行有点棘手:

first_word, *words = line.split()

如果你这样做:

x, y = ["hello", "world"]

python 会将 "hello" 分配给 x,将 "world" 分配给 y。换句话说,python取右边第一个元素,赋给左边第一个变量,然后python取右边第二个元素,赋给左边第二个变量左边等等

接下来,line.split() returns 一个列表,产生如下内容:

first_word, *words = ["The", "apple", "is", "red"]

再一次,python 将右侧的第一个元素分配给左侧的第一个变量,因此 "The" 被分配给 first_word。接下来,* 告诉 python 收集右边的其余元素并将它们全部分配给变量 words,这使得 words 成为一个列表。