如何使用Python csv编写器在字符串周围加上单引号?

如何使用Python csv编写器在字符串周围加上单引号?,python,file,csv,writer,Python,File,Csv,Writer,我在“emails.csv”中得到以下输出: 但我希望输出是 "susan@gmail.com" "joe@gmail.com" "sara@yahoo.com" 如何将正确的参数放入csv.writer()中,以获得所需的结果 更新: (一) 2) 如何放置“,”使其看起来像输出结果 看起来是你的报价单。尝试: email_writer = csv.writer(csvfile, quotechar=''', quoting=csv.QUOTE_NONNUMERIC,delimiter=',

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

但我希望输出是

"susan@gmail.com"
"joe@gmail.com"
"sara@yahoo.com"
如何将正确的参数放入csv.writer()中,以获得所需的结果

更新:

(一)


2) 如何放置“,”使其看起来像输出结果

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

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

您应该将引号字符更改为
quotechar=“”


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

根据其他人的注释更改引号字符或使用反斜杠转义

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()
我们似乎忽略了您的第二个问题:

这是一个黑客行为,因为我似乎不知道如何使用csv模块实现这一点。您可以这样尝试,而不是使用
csv.writer
编写文件:

   email_writer = csv.writer(csvfile, quotechar='\'', quoting=csv.QUOTE_NONNUMERIC,delimiter=',')
for control_rent_email in control_group_renters:
    csvfile.write('\'' + control_rent_email + '\'' + ',')
您也不需要显式地
关闭
正在写入的文件,因为当它不再被引用时,您打开它的方式会这样做


希望那里的人能想出一种不太老练的方法,特别是使用
csv.writer
。不过,这种方式可以满足您的需要。

csv书写器是一种可以将多行内容写入文件的设备。您应该只创建一个。告诉它使用单引号作为引号字符,并按如下方式使用:

   email_writer = csv.writer(csvfile, quotechar='\'', quoting=csv.QUOTE_NONNUMERIC,delimiter=',')
for control_rent_email in control_group_renters:
    csvfile.write('\'' + control_rent_email + '\'' + ',')
我希望你给出了一个你真正需要的简单例子;否则,当您每行只打印一个字符串时,为什么要这么麻烦呢?如果你真的想在每一行后面加一个逗号,除了最后一行,你真的不是为了任何CSV,你应该直接构建你的输出

也就是说,您可以通过向
writerow
传递一个空字符串来获得尾随逗号,但前提是使用
QUOTE\u MINIMAL
QUOTE\u NONE
(这将抑制电子邮件周围的无意义引号),而不是
QUOTE\u NONNUMERIC
;否则,将在空字符串周围加引号

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])
为完整起见,以下是如何真正生成所需的输出,而无需最后一个逗号和全部:

email_writer.writerow([control_rent_email, ""])

您已经使用了
quotechar='”
为什么不使用
quotechar=“”
?Python有多个引用样式;您可以使用
“'“
,或使用
”\''
显式转义引号。请参阅我的答案。您没有放置反斜杠。我似乎找不到任何使用csv.writer的东西提供“真实”csv输出的东西。“黑客”的方法是将电子邮件写入一个文件,在write语句中添加必要的字符。请参阅我的编辑。是否有办法在csv模块之外引用字符串?我想您的意思是明确地将其设置为单引号。@martineau否,在问题中,引号字符是单引号。这就是为什么引号字符需要更改的原因。这似乎是正确的。考虑到OP的要求,使用csv模块似乎是真正的黑客行为。@alexis那么不仅仅是我?我搜索并测试了一下,看看这是否可行,但除了上面提到的以外,我找不到其他解决方案。我认为
csv
模块可以轻松实现这一点。csv模块用于生成csv格式的变体。你注意到他不想在最后一行后面加逗号吗?为什么要在不需要加引号但后面有逗号的字符串周围加引号呢?那不是CSV。您可以使用
QUOTE\u NONE
,手动插入周围的引号(如上所述),并传递空字符串以触发尾随逗号(参见我的答案)。正如我所说,你的解决方案更合适。
with open("emails.txt", "w") as output:
    output.write( ",\n".join("'"+r+"'" for r in control_group_renters) +"\n" )