Использование Python csv writer без цитат

Я пытаюсь написать список строк, как показано ниже в файл, разделенных заданным разделителем.

res = [u'123', u'hello world']

когда я пытаюсь разделить на вкладку, как показано ниже, это дает мне правильно отформатированную строку.

writer = csv.writer(sys.stdout, delimiter="t")
writer.writerow(res)

gives --> 123   hello world

но когда я пытаюсь разделить пространство с помощью delimiter=" ", это дает мне пространство, но с кавычками, как показано ниже.

123 "hello world"

Как удалить кавычки. Так что, когда я использую пространство в качестве разделителя, я должен получить 123 hello world.

EIDT: когда я пытаюсь использовать escapechar, он не делает двойных кавычек. Но везде в моей testdata появляется пробел, это делает его двойным.

3 ответов


поведение цитирования контролируется различными quoting аргументы, предоставленные писателю (или установленные на Dialect объект, если вы предпочитаете делать это таким образом). Значение по умолчанию -QUOTE_MINIMAL, что не приведет к описываемому поведению, если значение не содержит символ разделителя, символ кавычки или символ конца строки. Дважды проверьте свои тестовые данные -[u'123', u'hello'] не будет производить то, что вы описали, но [u'123', u' hello'] будет.

вы можете указать QUOTE_NONE если вы уверены, что это поведение, которое вы хотите, в этом случае он либо попытается избежать экземпляров вашего символа разделителя, если вы установите Escape-символ, или вызвать исключение, если вы этого не сделаете.


вы можете установить csv.writer ничего не цитировать с quoting=csv.QUOTE_NONE например:

import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            escapechar=' ', quoting=csv.QUOTE_NONE)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

выдает:

Spam Spam Spam Spam Spam Baked  Beans
Spam Lovely  Spam Wonderful  Spam

если у вас QUOTING_NONE вы нужно и символ.


вам нужен CSV lib? Просто присоединяйтесь к струнам...

>>> res = [u'123', u'hello'] 
>>> print res
[u'123', u'hello']
>>> print " ".join(res)
123 hello