如何使用Python csv writer将单引号括在字符串周围?

时间:2013-12-06 23:27:38

标签: python file csv writer

with open("emails.csv", "w") as csvfile:
    for control_rent_email in control_group_renters:
        email_writer = csv.writer(csvfile, quotechar='"', quoting=csv.QUOTE_NONNUMERIC,delimiter=',')
        email_writer.writerow([control_rent_email])
    csvfile.close()

我在“emails.csv”中得到以下输出:

"susan@gmail.com"
"joe@gmail.com"
"sara@yahoo.com"

但我希望输出为

'susan@gmail.com',
'joe@gmail.com',
'sara@yahoo.com'

如何在csv.writer()中输入正确的参数来实现所需的结果?

更新:

1)

email_writer = csv.writer(csvfile, quotechar=''', quoting=csv.QUOTE_NONNUMERIC,delimiter=',')                                                                                            
SyntaxError: EOL while scanning string literal

2)如何将“,”看起来像输出结果?

4 个答案:

答案 0 :(得分:2)

按其他人的说明更改引号字符或使用反斜杠转义符。

   email_writer = csv.writer(csvfile, quotechar='\'', quoting=csv.QUOTE_NONNUMERIC,delimiter=',')

我们似乎错过了你的第二个问题:

这是 hack ,因为我似乎无法弄清楚如何使用csv模块执行此操作。而不是使用csv.writer编写文件,您可以这样尝试:

for control_rent_email in control_group_renters:
    csvfile.write('\'' + control_rent_email + '\'' + ',')

您也不需要明确close您正在写入的文件,因为当您不再引用该文件时,它会执行此操作。

希望那里的某个人可以用一种不那么糟糕的方式弄清楚如何做到这一点,特别是使用csv.writer。这种方式可以满足您的需求。

答案 1 :(得分:1)

csv writer是一种可用于将多个行写入文件的设备。你应该只创建一个。告诉它使用单引号作为引号字符,并以这种方式使用它:

with open("emails.csv", "w") as csvfile:
    email_writer = csv.writer(csvfile, quotechar="'", quoting=csv.QUOTE_NONNUMERIC,delimiter=',')
    for control_rent_email in control_group_renters:
        email_writer.writerow([control_rent_email])

我希望你能给出一个你真正需要的简化例子;否则,为什么在每行只打印一个字符串时会遇到所有这些麻烦?如果你真的想要除了最后一行之外的每行上有一个尾随逗号,那么你真的不是针对任何类型的CSV而你应该直接构建你的输出。

也就是说,您可以通过将空字符串传递给writerow来获取尾随逗号,但前提是您使用QUOTE_MINIMALQUOTE_NONE(这会抑制电子邮件周围的无意义引号)而不是QUOTE_NONNUMERIC;否则你会在空字符串周围得到引号。

email_writer.writerow([control_rent_email, ""])

为了完整性,以下是真正生成所需输出的方式,没有最终的逗号和所有:

with open("emails.txt", "w") as output:
    output.write( ",\n".join("'"+r+"'" for r in control_group_renters) +"\n" )

答案 2 :(得分:0)

它看起来像是你的报价。尝试:

with open("emails.csv", "w") as csvfile:
    for control_rent_email in control_group_renters:
        email_writer = csv.writer(csvfile, quotechar="'", quoting=csv.QUOTE_NONNUMERIC,delimiter=',')
        email_writer.writerow([control_rent_email])
    csvfile.close()

答案 3 :(得分:0)

您应该将引号字符更改为quotechar="'"

在您的代码中,您已明确指定引号字符应为双引号。