2015-07-03 4 views
0

Я пытаюсь создать файл .csv, потянув данные из Oracle DB. И, мне нужно разграничить file персонажем thorn.Создание файла .csv с разделителем utf-8

Ошибка:

Its outside the range 128. 

Есть ли способ я могу создать csv с multibyte delimiter?

+2

Покажите нам код, конкретно MCVE http://stackoverflow.com/help/mcve – CrazyCasta

+0

Вы можете использовать функцию печати с «колючкой» в качестве разделителя и перенаправить в файл. –

ответ

0

Вы действительно можете написать строки UTF-8 с модулем csv, но вы не можете передавать строки unicode, содержащие символы не ASCII, в csv-запись. Документ для функции writerow(row): Строка должна быть последовательностью строк или чисел для объектов Writer и словами, сопоставляющими имена полей с строками или номерами (, передавая их через str() сначала) для объектов DictWriter. (акцент мой). Таким образом, вы должны сначала значения кодирования:

writer.writerow([ val.encode('utf8') if isinstance(val, unicode) else val for val in row ]) 

же для сепаратора не использовать Юникод, но строка в кодировке: использовать занозу в качестве разделителя:

wr = csv.writer(fd, delimiter = u'\xfe'.encode('utf8')) 
+0

Привет, я попробовал второй метод, так как мне просто нужен разделитель. Я получил ошибку: c = csv.writer (open (oFile, 'wb'), delimiter = u '\ xfe'.encode (' utf8 ')) TypeError: «разделитель» должен быть 1-символьной строкой. Не могли бы вы мне помочь? Я очень новичок в Python. 2-3 недели. –

0

В latin1 кодирующего шипом характер, þ, только один байт, так что следующие работал для меня с помощью Python 2.7.10:

# -*- coding: latin1 -*- 

import csv 

with open('unitest.csv', 'wb') as csvfile: 
    writer = csv.writer(csvfile, delimiter='þ') 
    writer.writerow([1,2,3,'a','b','c']) 

Содержание CSV-файла, созданные:

1þ2þ3þaþbþc