Найти - Пользователи
Полная версия: Python 3 export to CSV
Начало » Центр помощи » Python 3 export to CSV
1
dr
Привет!
Я не программист, просто пытаюсь автоматизировать кое что..
Помогите сделать файлик csv, пытаюсь вот так сделать:
# -*- coding: cp1251 -*-
import csv
text = 123
def exp(text):
    with open("test.csv", "wb") as csv_file:
        writer = csv.writer(csv_file)
        writer.writerow(text)
    csv_file.close()
exp(text)

На выходе ошибка:
C:\Python34\python.exe C:/PythonScripts/wwwToExcel/Base.py
Traceback (most recent call last):
  File "C:/PythonScripts/wwwToExcel/Base.py", line 12, in <module>
    exp(text)
  File "C:/PythonScripts/wwwToExcel/Base.py", line 9, in exp
    writer.writerow(text)
_csv.Error: sequence expected

После экспорта, по идее будет проблемма с кодировкой, помогите плиз ее тоже решить, файл буду заполнить русскими буквми.
Пример строки:
00001 ОАО "14 ТМП" FORD FOCUS Т961ВН197 Действующее
i.slepov
dr
sequence expected

Кормите его (writer.writerow) списками.

dr
csv_file.close()

Не нужно. Вы же в контексте выполняете.

dr
После экспорта, по идее будет проблемма с кодировкой

С чего бы?
py.user.next
dr
по идее будет проблемма с кодировкой, помогите плиз ее тоже решить, файл буду заполнить русскими буквми
Открой файл не в двоичном режиме, а текстовом с указанием кодировки.

>>> import csv
>>> 
>>> with open('file.csv', 'w', encoding='utf-8') as fout:
...     writer = csv.writer(fout)
...     writer.writerow(['абвг', 'деёж'])
... 
11
>>> with open('file.csv', 'rb') as fin:
...     print(repr(fin.read().decode('utf-8')))
... 
'абвг,деёж\r\n'
>>>
dr
Большое СПАСИБО! Все получилось. Стал передавать список, указал кодировку.
А как сделать возврат каретки и переход на следующую строку ? что бы в цикле заполнять csv по строкам?

list = [text,'\r\n']
def exp(list):
    with open('test.csv', 'w', encoding='cp1251') as csv_file:
        writer = csv.writer(csv_file)
        writer.writerow(list)
exp(list)
exp([123,'\r\n'])
py.user.next
dr
А как сделать возврат каретки и переход на следующую строку ?
Признак конца записи (CRLF) сам ставится. (Такой признак конца определён в rfc.) Поэтому вручную ставить его не надо.

Вместо слова list используй lst, так как list - это имя класса.

>>> import csv
>>> 
>>> def f(fname, lst, enc):
...     with open(fname, 'w', encoding=enc) as fp:
...         writer = csv.writer(fp)
...         writer.writerows(lst)
... 
>>> f('file1.csv', [[1, 2, 3], [4, 5, 6]], 'utf-8')
>>> f('file2.csv', [[1], [2], [3]], 'utf-8')
>>> f('file3.csv', [['a,b'], ['c,d'], ['e,f']], 'utf-8')
>>>

[guest@localhost py]$ cat -e file1.csv 
1,2,3^M$
4,5,6^M$
[guest@localhost py]$ cat -e file2.csv
1^M$
2^M$
3^M$
[guest@localhost py]$ cat -e file3.csv
"a,b"^M$
"c,d"^M$
"e,f"^M$
[guest@localhost py]$
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB