Python:即使在指定分隔符之后,csv 编写器也会在错误的位置分隔

Python: Even after specifying delimiter, csv writer delimits at wrong place

我正在尝试将这样的列表写入 CSV 文件:

['ABC','One,Two','12']
['DSE','Five,Two','52']

像这样的文件:

ABC   One,Two   12
DSE   Five,Two   52

基本上,将“”内的任何内容写入单元格。 但是,它将 One 和 Two 拆分到不同的单元格中,并在第一个单元格中将 ABC 与 One 合并。

我的部分脚本:

out_file_handle = open(output_path, "ab")
writer = csv.writer(out_file_handle, delimiter = "\t", dialect='excel', lineterminator='\n', quoting=csv.QUOTE_NONE)    
output_final = (tsv_name_list.split(".")[0]+"\t"+key + "\t" + str(listOfThings))
output_final = str([output_final]).replace("[","").replace("]","").replace('"',"").replace("'","")
output_final = output_final.split("\t")
print output_final #gives the first lists of strings I mentioned above.
writer.writerow(output_final)

第一 output_final 行给出

ABC  One,Two  12
DSE  Five,Two  52

您已经设置了 CSV 写入器,但出于某种原因您完全忽略了它并尝试手动输出行。那是没有意义的。使用可用的功能。

writer = csv.writer(...)
for row in tsv_list:
    writer.writerow(row)

使用 csv 模块很简单,因此您需要更具体地说明是什么让您相信元素正在跨单元格流动。例如,使用(现在已经过时了)Python 2.7:

import csv

data_lists = [['ABC','One,Two','12'],
              ['DSE','Five,Two','52']]

with open("out.tsv", "wb") as fp:
    writer = csv.writer(fp, delimiter="\t", dialect="excel", lineterminator="\n")
    writer.writerows(data_lists)

我得到一个 out.tsv 文件:

dsm@winter:~/coding$ more out.tsv 
ABC One,Two 12
DSE Five,Two    52

>>> out = open("out.tsv").readlines()
>>> for row in out: print repr(row)
... 
'ABC\tOne,Two\t12\n'
'DSE\tFive,Two\t52\n'

这正是它应该的样子。现在,如果您采用制表符分隔的这些行,并出于某种原因使用 commas 作为分隔符将它们拆分,当然,您会认为有两列,一列带有 ABC\tOne 和一个 Two\t12。但这很愚蠢。