Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2015 14:11:22

dr
Зарегистрирован: 2015-09-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 3 export to CSV

Привет!
Я не программист, просто пытаюсь автоматизировать кое что..
Помогите сделать файлик 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 Действующее

Отредактировано dr (Сен. 14, 2015 14:18:23)

Офлайн

#2 Сен. 14, 2015 14:25:23

i.slepov
Зарегистрирован: 2015-05-28
Сообщения: 53
Репутация: +  5  -
Профиль   Отправить e-mail  

Python 3 export to CSV

dr
sequence expected

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

dr
csv_file.close()

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

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

С чего бы?

Офлайн

#3 Сен. 14, 2015 14:39:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9895
Репутация: +  855  -
Профиль   Отправить e-mail  

Python 3 export to CSV

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'
>>>



Отредактировано py.user.next (Сен. 14, 2015 14:42:17)

Офлайн

#4 Сен. 14, 2015 16:14:23

dr
Зарегистрирован: 2015-09-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 3 export to CSV

Большое СПАСИБО! Все получилось. Стал передавать список, указал кодировку.
А как сделать возврат каретки и переход на следующую строку ? что бы в цикле заполнять 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'])

Офлайн

#5 Сен. 15, 2015 01:09:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9895
Репутация: +  855  -
Профиль   Отправить e-mail  

Python 3 export to CSV

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]$



Отредактировано py.user.next (Сен. 15, 2015 01:18:37)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version