Использование 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