TypeError:强制转换为unicode需要字符串或缓冲区,找到列表

时间:2015-03-05 06:31:20

标签: python python-2.7 csv unicode

我正在编写一个代码,我需要将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

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

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

尝试

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

答案 1 :(得分:1)

除了Tzach发现的问题外,还有其他一些问题:

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

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

  3. 如果您处理的文件大小恰好是5GB,那么您的代码会将该数据两次复制到内存中,这需要10GB的内存。这可能会压倒你系统的记忆。

    你能做的是:

    1. 一行阅读。
    2. 处理这条线。
    3. 将处理过的行写入csv文件。
    4. 请阅读下一行。
    5. 这样,您一次只能将非常少量的文本读入内存。以下是处理任何大小文件的方法:

      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将分配"你好"到x和"世界"到了。换句话说,python接受右边的第一个元素,并将它分配给左边的第一个变量,然后python接受右边的第二个元素,并将它分配给左边的第二个变量,等等。

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

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

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