【问题标题】:Python- How to use csv.writer with out quotationPython-如何在不引用的情况下使用 csv.writer
【发布时间】:2014-10-17 06:46:53
【问题描述】:

我有一个列表,其内容必须写入 csv 文件,不带引号。

列表内容如下:

list=[(1, 2, 1), (1, 3, 1), (1, 4, 1), (1, 5, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (2, 5, 1), (3, 1, 1), (3, 2, 1), (3, 4, 1), (3, 5, 1), (4, 1, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 1, 1), (5, 2, 1), (5, 3, 1), (5, 4, 1)]

现在我有以下两个代码 sn-p 尝试将此列表写入 csv 文件:

方法一:

定义方法1():

list=[(1, 2, 1), (1, 3, 1), (1, 4, 1), (1, 5, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (2, 5, 1), (3, 1, 1), (3, 2, 1), (3, 4, 1), (3, 5, 1), (4, 1, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 1, 1), (5, 2, 1), (5, 3, 1), (5, 4, 1)]
myfile = open('output.csv', 'w')
        wr = csv.writer(myfile, quoting = csv.QUOTE_NONE, delimiter=',', escapechar=',')
        wr.writerow(list)

csv文件内容如下:

(1,, 2,, 1),(1,, 3,, 1),(1,, 4,, 1),(1,, 5,, 1),(2,, 1,, 1),(2,, 3,, 1),(2,, 4,, 1),(2,, 5,, 1),(3,, 1,, 1),(3,, 2,, 1),(3,, 4,, 1),(3,, 5,, 1),(4,, 1,, 1),(4,, 2,, 1),(4,, 3,, 1),(4,, 5,, 1),(5,, 1,, 1),(5,, 2,, 1),(5,, 3,, 1),(5,, 4,, 1)

我不希望列表元素之间的“,”。如果我从上面的代码中删除了 escapechar,它会抛出一个错误。

错误是:

_csv.Error:需要转义,但没有设置转义符

方法二:

定义方法2():

list=[(1, 2, 1), (1, 3, 1), (1, 4, 1), (1, 5, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (2, 5, 1), (3, 1, 1), (3, 2, 1), (3, 4, 1), (3, 5, 1), (4, 1, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 1, 1), (5, 2, 1), (5, 3, 1), (5, 4, 1)]
myfile = open('output.csv', 'wb')
        wr = csv.writer(myfile)
        wr.writerow(list)

方法2的输出如下图:

"(1, 2, 1)","(1, 3, 1)","(1, 4, 1)","(1, 5, 1)","(2, 1, 1 )","(2, 3, 1)","(2, 4, 1)","(2, 5, 1)","(3, 1, 1)","(3, 2, 1 )","(3, 4, 1)","(3, 5, 1)","(4, 1, 1)","(4, 2, 1)","(4, 3, 1 )","(4, 5, 1)","(5, 1, 1)","(5, 2, 1)","(5, 3, 1)","(5, 4, 1 )"

有人可以帮我解决这个问题吗?

我的输出文件的内容必须是这样的:

(1, 2, 1), 
(1, 3, 1), 
(1, 4, 1), 
(1, 5, 1),

...
...

【问题讨论】:

  • 如果这是您的输出格式,我认为使用 csv 模块没有多大优势。
  • @monkut 你能告诉我我该怎么做吗?

标签: python python-2.7 csv


【解决方案1】:

你根本不需要 csv,看看这个:

>>> list=[(1, 2, 1), (1, 3, 1), (1, 4, 1), (1, 5, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (2, 5, 1), (3, 1, 1), (3, 2, 1), (3, 4, 1), (3, 5, 1), (4, 1, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 1, 1), (5, 2, 1), (5, 3, 1), (5, 4, 1)]
>>> with open('out.txt', 'w') as out:
...     for t in list:
...         out.write(str(t)+",\n")
... 
>>> 
host:~$ head out.txt 
(1, 2, 1),
(1, 3, 1),
(1, 4, 1),
(1, 5, 1),
(2, 1, 1),
(2, 3, 1),
(2, 4, 1),
(2, 5, 1),
(3, 1, 1),
(3, 2, 1),

【讨论】:

    【解决方案2】:

    您描述的格式似乎不需要csv 模块。您可以使用以下内容写出格式:

    list=[(1, 2, 1), (1, 3, 1), (1, 4, 1), (1, 5, 1), (2, 1, 1), (2, 3, 1), (2, 4, 1), (2, 5, 1), (3, 1, 1), (3, 2, 1), (3, 4, 1), (3, 5, 1), (4, 1, 1), (4, 2, 1), (4, 3, 1), (4, 5, 1), (5, 1, 1), (5, 2, 1), (5, 3, 1), (5, 4, 1)]
    
    with open("output.csv", "w") as out_f:
        for item in list:
            output_str = "{},\n".format(item)
            out_f.write(output_str)
    

    【讨论】:

    • 太棒了,感谢您的快速回复!还有一个问题,你能告诉我什么时候必须使用 csv 模块,什么时候不需要?考虑到上述情况,我很挣扎!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2013-04-04
    • 2015-08-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多