【问题标题】:Writing a string with comma in one column of CSV file在 CSV 文件的一列中写入带逗号的字符串
【发布时间】:2022-01-15 18:37:49
【问题描述】:

我使用以下行将一些信息写入逗号分隔的 CSV 文件。

f = open(output_file, 'w', newline='')
wr = csv.writer(f)
...
f.write(str(n) + "," + str(key) + "\n" )

问题是key 是一个可能包含“,”的字符串,这会导致最终的 CSV 文件有超过 2 列,而我想将整个 key 写为单列。

我知道wr.writerow([key]) 将整个键写入一列,但我想对write() 做同样的事情。有什么办法解决这个问题吗?

【问题讨论】:

  • 不要这样做。使用csv.writer() 的关键在于它会为你进行这种类型的转义。坚持下去。 (或者,如果 wr 方法不适合您,您可以在问题中说明原因。)
  • 因此我无法拥有两列 csv 文件。你说的是这个吗?

标签: python python-3.x csv


【解决方案1】:

write() 是与打开的文件对象关联的方法。 writerow() 是与 csvwriter 对象关联的方法。

虽然您的问题表明您希望结果由write() 函数生成,但不清楚为什么您觉得需要使用f.write() 方法来完成此任务。您尝试做的事情通常由 csv.writer() 处理>

import csv

n1 = 'n'
key1 = 'alpha_key,beta_key'

n2 = 42
key2 = 'no_comma_in_this_key'

这将创建一个文件句柄,指向一个可在磁盘上写入的打开文件。

f = open('myfile.csv', 'w')   

这将创建一个写入器对象,该对象可以在后台使用该文件 (f) 将行写入文件。

wr = csv.writer(f)

为简单起见,将创建适合一行的元素作为列表中的一对字符串。

row = [str(n1), str(key1)]

将使用 csv 编写器的先天能力来创建行(使用适当的引号字符来封装错误的逗号)。

wr.writerow(row)

我们可以用第二组数据重复这些步骤,以展示它如何处理不包含逗号的键。

row = [str(n2), str(key2)]
wr.writerow(row)

当我们处理完文件后,我们应该 close() 它,以便缓冲区中的任何数据都将写入磁盘(注意:带有上下文管理器的更好,但为简单起见,使用这种方法)。

f.close()

输出如下所示,并显示了 csv 规范如何通过在具有嵌套逗号的列值周围加上引号来处理其中可能包含逗号的列。

n,"alpha_key,beta_key"
42,no_comma_in_this_key

总而言之,代码如下所示:

import csv

n1 = 'n'
key1 = 'alpha_key,beta_key'

n2 = 42
key2 = 'no_comma_in_this_key'

f = open('myfile.csv', 'w')
wr = csv.writer(f)

row = [str(n1), str(key1)]
wr.writerow(row)

row = [str(n2), str(key2)]
wr.writerow(row)

f.close()

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 2016-09-04
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2014-02-08
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多