我正在尝试从my_list 1&输出组合2
import itertools
import csv
my_list1=["+Red"]
my_list2=["+Lip +Stick","+Magic"]
# Please note: Space is kept intentionally in "+Lip +Stick" above
combinations=itertools.product(my_list1,my_list2)
with open('Txt_of_Keywords.txt','w') as f1:
writer=csv.writer(f1,lineterminator='\n',)
for c in combinations:
writer.writerow(c)
没有分隔符的输出:
+Red,+Lip +Stick
+Red,+Magic
我想在上面的输出中用空格替换逗号。
我尝试使用分隔符添加空格,如下所示:
writer=csv.writer(f1,delimiter=' ',lineterminator='\n',)
带分隔符的输出:
+Red "+Lip +Stick"
+Red +Magic
以上输出错误地写入引号。这是因为" + Lip + Stick"在定义my_list2时,它们之间有空格。可悲的是,我想要那个空间。
请帮我用空格替换逗号(如上面粗体突出显示)。
答案 0 :(得分:2)
为什么报价不正确'?您编写了一个包含空格的值,编写者使用引号来确保空格不被视为分隔符。
如果您不想引用,也可以直接将值写入文件。如果您使用print()
function,则可以免费获得换行符和空格:
with open('Txt_of_Keywords.txt','w') as f1:
for c in combinations:
print(*c, file=f1)
您无法告诉csv.writer()
对象忽略值中的分隔符;您的选择是在引用之间,使用转义字符,或者如果同时禁用两者,则会引发错误。您的另一个选择是将您的列拆分为分隔符,但只需使csv
模块正常工作,您真的不需要使用该模块所有强>
答案 1 :(得分:0)
你试图引诱csv
模块进入而不是引用/转义空间。将quoting
设置为csv.QUOTENONE
和/或csv.quotechar
设置为“空”不起作用,引发以下异常:
quotechar must be set if quoting enabled
或
need to escape, but no escapechar set
csv
已进行检查,以确保由于可逆性原因不会发生这种情况。
因此,最好的方法是拆分每个值,并将使用此生成器理解获得的标记列表展平为itertools.chain.from_iterable
:
writer.writerow(list(itertools.chain.from_iterable(x.split() for x in c)))
完整示例:
my_list1=["+Red"]
my_list2=["+Lip +Stick","+Magic"]
# Please note: Space is kept intentionally in "+Lip +Stick" above
combinations=itertools.product(my_list1,my_list2)
with open('Txt_of_Keywords.txt','w') as f1:
writer=csv.writer(f1,lineterminator='\n',delimiter=" ")
for c in combinations:
writer.writerow(list(itertools.chain.from_iterable(x.split() for x in c)))
现在我得到了:
+Red +Lip +Stick
+Red +Magic
此时您也可以在没有csv
模块的情况下编写列表,因为csv
的要点是轻松转义可能与分隔符交互并处理多行的字符(请参阅Martjin)新答案)。