Вы можете сделать это:
width: auto; обивка: 20px;
import csv
with open(..., 'wb') as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
wr.writerow(mylist)
import csv
with open("file.csv", 'w') as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
wr.writerow(mylist)
wb
, этот ответ только записывает wthout двоичный код, который не является тем же
– hisi
4 March 2018 в 14:19
Вот безопасная версия Alex Martelli's:
import csv
with open('filename', 'wb') as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
wr.writerow(mylist)
with
, следя за тем, чтобы файл был закрыт
– BoltzmannBrain
15 May 2015 в 20:20
wr.writerow(my_list)
внутри цикла?
– crypdick
7 June 2017 в 23:05
вы должны обязательно использовать CSV-модуль, но, скорее всего, вам нужно написать unicode. Для тех, кому нужно написать unicode, это класс из примера страницы, который вы можете использовать в качестве модуля util:
import csv, codecs, cStringIO
class UTF8Recoder:
"""
Iterator that reads an encoded stream and reencodes the input to UTF-8
"""
def __init__(self, f, encoding):
self.reader = codecs.getreader(encoding)(f)
def __iter__(self):
return self
def next(self):
return self.reader.next().encode("utf-8")
class UnicodeReader:
"""
A CSV reader which will iterate over lines in the CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
f = UTF8Recoder(f, encoding)
self.reader = csv.reader(f, dialect=dialect, **kwds)
def next(self):
row = self.reader.next()
return [unicode(s, "utf-8") for s in row]
def __iter__(self):
return self
class UnicodeWriter:
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def writerow(self, row):
self.writer.writerow([s.encode("utf-8") for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)
Для другого подхода вы можете использовать DataFrame в pandas : и он может легко сбрасывать данные в csv так же, как код ниже:
import pandas
df = pandas.DataFrame(data={"col1": list_1, "col2": list_2})
df.to_csv("./file.csv", sep=',',index=False)
Вот еще одно решение, для которого не требуется модуль csv
.
print ', '.join(['"'+i+'"' for i in myList])
Пример:
>>> myList = [u'value 1', u'value 2', u'value 3']
>>> print ', '.join(['"'+i+'"' for i in myList])
"value 1", "value 2", "value 3"
Однако, если в исходном списке содержится некоторое число, они не будет экранировано. Если это необходимо, можно вызвать функцию, чтобы избежать этого:
print ', '.join(['"'+myFunction(i)+'"' for i in myList])
В этом случае вы можете использовать метод string.join.
Разделить на несколько строк для ясности - вот интерактивный сеанс
>>> a = ['a','b','c']
>>> first = '", "'.join(a)
>>> second = '"%s"' % first
>>> print second
"a", "b", "c"
Или как одна строка
>>> print ('"%s"') % '", "'.join(a)
"a", "b", "c"
Однако у вас может возникнуть проблема: у ваших строк есть встроенные кавычки. Если это так, вам нужно решить, как избежать их.
Модуль CSV может позаботиться обо всем этом для вас, позволяя вам выбирать между различными параметрами кавычек (все поля, только поля с кавычками и разделителями, только не числовые поля , и т. д.), и как с помощью esacpe control charecters (двойные кавычки или экранированные строки). Если ваши значения просты, string.join, вероятно, будет в порядке, но если вам нужно управлять множеством случаев, используйте доступный модуль.
Предположим, что ваш список A
Затем вы можете запрограммировать следующее объявление, которое вы получите в виде файла csv (только для столбцов!)
R="\n".join(A)
f = open('Columns.csv','w')
f.write(R)
f.close()
Лучший вариант, который я нашел, это использовать savetxt
из модуля numpy
:
import numpy as np
np.savetxt("file_name.csv", data1, delimiter=",", fmt='%s', header=header)
Если у вас есть несколько списков, которые должны быть stacked
np.savetxt("file_name.csv", np.column_stack((data1, data2)), delimiter=",", fmt='%s', header=header)
Используйте модуль csv
python для чтения и записи запятых или файлов с разделителями табуляции. Модуль csv является предпочтительным, потому что он дает вам хороший контроль над цитированием.
Например, здесь приведенный вами пример:
import csv
data = ["value %d" % i for i in range(1,4)]
out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL)
out.writerow(data)
Производит:
"value 1","value 2","value 3"
csv
в 2.x не работает должным образом с юникодами; см. документацию по модулю для примеров того, как справиться с этим. docs.python.org/library/csv.html – Ignacio Vazquez-Abrams 18 January 2010 в 08:39'w'
решило проблему. – botchniaque 15 September 2015 в 13:25open(filename, 'w', newline='')
сделал трюк для меня. – Dennis Jaheruddin 4 April 2016 в 12:35