Python - 正则表达式从CSV文件中删除整行的引号

时间:2013-11-15 21:11:55

标签: python regex csv

我在这里看到很多关于如何从CSV文件中的一行中删除引号的问题,但这不是我的问题。使用像

这样的东西
with open(path), 'wb') as myfile:
  writer = csv.writer(myfile)

我需要创建由3个变量的值组成的行。这导致了这样一条线:

newline = var1 + " " + var2 + " " + var3

我想要value1 value2 value3之类的结果,但它会给我"value1 value2 value3"。我尝试过它之间没有空格,所有这些都搞砸了格式而没有删除引号。我还尝试将quoting = CSV_NOQUOTE(或类似的东西)添加到编写器声明中,但是在我添加\n之前,这导致了关于丢失escapechars的错误,即便如此它也没有消除报价。我一直在搜索这里的页面大约一个小时试图找到一些东西,但我找不到任何东西。有人可以提供任何建议吗?谢谢!

编辑:为了配合标题,此时我对此感到非常沮丧,我可以通过一种解决方法来摆脱带有正则表达式的引号而不是阻止它们形成。我只是不太了解Python的正则表达式,我已经非常简单地使用它了,而且我不确定如何基本上相当于使用它的sed s /命令。

2 个答案:

答案 0 :(得分:6)

您没有显示实际使用writer向文件写入行的行。人们有时犯的一个错误就是假设writerow接受的东西不是可迭代的值。

以下代码(python 2):

import csv
with open("out.dat", "wb") as myfile:
    writer = csv.writer(myfile, delimiter=" ", quoting=csv.QUOTE_NONE)
    var1, var2, var3 = 3.14, 2.1728, "Fred"
    writer.writerow([var1, var2, var3])

产生

~/coding$ cat out.dat
3.14 2.1728 Fred

答案 1 :(得分:1)

编写CSV文件的一个选项是完全避免使用csv模块:

output = [var1, var2, var3]

with open('output.csv', 'wb') as fo:
    fo.write(','.join([str(x) for x in output]) + '\n')

当然,您可以使用列表列表(或任何可迭代的)来写出多行:

outlist = [[var1, var2, var3], [var4, var5, var6]]

with open('output.csv', 'wb') as fo:
    for out in outlist:
        fo.write(','.join([str(x) for x in out]) + '\n')

如果您想要空格作为分隔符,则可以改为使用' '.join()