Я пытаюсь создать файл .csv со значениями из списка Python. Когда я печатаю значения в списке, все они имеют Unicode (?), Т.е. они выглядят примерно так
[u'value 1', u'value 2', ...]
Если я перебираю значения в списке, то есть for v in mylist: print v
они выглядят как обычный текст.
И я могу положить ,
между каждым сprint ','.join(mylist)
И я могу вывести в файл, т.е.
myfile = open(...)
print >>myfile, ','.join(mylist)
Но я хочу вывести в CSV и иметь разделители вокруг значений в списке, например
"value 1", "value 2", ...
Я не могу найти простой способ включить разделители в форматирование, например, я пробовал через join
утверждение. Как я могу это сделать?
Ответы:
Изменить: это работает только с Python 2.x.
Для того, чтобы заставить его работать с питоном 3.x заменить
wb
сw
( см этот SO ответ )источник
csv
модуль в 2.x не работает должным образом с юникодами; см. документацию модуля для примеров того, как справиться с этим. docs.python.org/library/csv.htmlTypeError: 'str' does not support the buffer interface
.'w'
здесь: stackoverflow.com/questions/34283178/…Вот безопасная версия Алекса Мартелли:
источник
with
, убедившись, что файл закрыт, когда закончитеwr.writerow(my_list)
внутри цикла?Для другого подхода вы можете использовать DataFrame в pandas : и он может легко вывести данные в csv, как показано ниже:
источник
Лучший вариант, который я нашел, это использование модуля
savetxt
from :numpy
Если у вас есть несколько списков, которые нужно сложить
источник
Используйте
csv
модуль python для чтения и записи файлов с запятой или табуляцией. Модуль CSV является предпочтительным, потому что он дает вам хороший контроль над цитированием.Например, вот работающий пример для вас:
Производит:
источник
out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL))
заполняет данные, независимо от того, помещаете выopen("myfile.csv","w")
или новый файлopen("myfile2.csv","w")
. Похоже, что объект out не может иметь дело с файловым объектом, созданным во время выполнения, но сохраняет процесс вывода как задачу. Другими словами: объект out сохраняет объект file при первом запуске, но записывает только тогда, когда объект file уже существует! См. правильное решение ниже @Saurabh AdhikaryВ этом случае вы можете использовать метод string.join.
Для ясности разделите несколько строк - вот интерактивная сессия
Или как одна строка
Однако у вас может быть проблема, если в ваших строках есть кавычки. Если это так, вам нужно решить, как избежать их.
Модуль CSV может позаботиться обо всем этом для вас, позволяя вам выбирать между различными вариантами цитирования (все поля, только поля с кавычками и разделителями, только не числовые поля и т. Д.) И как ускорить использование символов управления (двойные кавычки или вырвались струны). Если ваши значения простые, string.join, вероятно, будет в порядке, но если вам приходится управлять множеством крайних случаев, используйте доступный модуль.
источник
Это решение звучит безумно, но работает как мед
Файл пишется csvwriter, поэтому свойства csv поддерживаются, то есть разделяются запятыми. Разделитель помогает в основной части, каждый раз перемещая элементы списка на следующую строку.
источник
data = [["value %d" % i, "value %d" % (i+1)] for i in range(1,4)] with open("myfile.txt","w") as f: out = csv.writer(f, quoting=csv.QUOTE_ALL, delimiter='\n') out.writerow([';'.join(x) for x in data])
Создать и записать в CSV-файл
Приведенный ниже пример демонстрирует создание и запись файла CSV. Для создания динамического средства записи файлов нам нужно импортировать пакет csv , а затем создать экземпляр файла со ссылкой на файл, например: - с открытым ("D: \ sample.csv", "w", newline = "" ) как file_writer
здесь, если файл не существует с указанным файловым каталогом, тогда python создаст тот же файл в указанном каталоге, а «w» представляет запись, если вы хотите прочитать файл, замените «w» на «r» или добавьте к существующему файлу, то "а". newline = "" указывает, что он удаляет лишнюю пустую строку при каждом создании строки, поэтому для удаления пустой строки мы используем newline = "", создаем некоторые имена полей (имена столбцов), используя список, например fields = ["Names", "Age "," Class "] , затем примените к экземпляру Writer, например, writer = csv.DictWriter (file_writer, fieldnames = fields), используя здесь Dictionary Writer и присваивая имена столбцов, чтобы записать имена столбцов в csv, который мы используем writer. в то время как запись значений файла должна быть передана с использованием словарного метода, здесь ключ является именем столбца, а значение является вашим соответствующим значением ключа
источник
Блокнот Jupyter
Допустим, ваш список
A
Затем вы можете написать следующее объявление, и оно будет в виде CSV-файла (только для столбцов!)
источник
Вы должны использовать модуль CSV наверняка, но есть вероятность, что вам нужно написать Unicode. Для тех, кому нужно написать Unicode, это класс из примера страницы, который вы можете использовать в качестве модуля утилит:
источник
Вот еще одно решение, которое не требует
csv
модуля.Пример :
Однако, если в первоначальном списке есть некоторые ", они не будут экранированы. Если это необходимо, можно вызвать функцию для ее экранирования следующим образом:
источник