如何使用Python csv编写器在字符串周围加上单引号?
我在“emails.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=',
"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" )