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
。但这很愚蠢。
我正在尝试将这样的列表写入 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
。但这很愚蠢。