2016-10-03 2 views
3

Я пытаюсь создать CSV в европейском формате в python. Я уже установить разделитель запятойКак написать csv с запятой в виде десятичного разделителя?

writer = csv.writer(response, delimiter=';', quoting=csv.QUOTE_ALL) 

Однако, это все еще использует точку . в качестве десятичного разделителя. Каков правильный способ заставить его использовать запятую, как это правильно для моей локали? Я не могу найти способ установить его в документах. (Я использую, и предпочел бы придерживаться, встроенного csv модуля)

редактирования: Это было отмечен как дубликат, но связанный вопрос касается чтения и не писать. Я не мог найти ответ на письмо. И эти предметы (слегка, но важно) разные.

+0

Что такое разделитель десятичных чисел от источника данных? –

+0

В этой связи есть несколько обсуждений - это может быть полезно: http://stackoverflow.com/questions/7751157/python-csv-list-separator-based-on-regional-settings – emmalg

+0

@AliSAIDOMAR что? У меня есть некоторые плагины python, поэтому у них на самом деле нет назначенного им десятичного разделителя, это числа. Но я не думаю, что понимаю ваш вопрос. – maniexx

ответ

3

Немного Hacky способом, но это лучшее, что я могу думать: конвертировать поплавки в строки и заменить . с ,:

def localize_floats(row): 
    return [ 
     str(el).replace('.', ',') if isinstance(el, float) else el 
     for el in row 
    ] 

for row in rows: 
    writer.writerow(localize_floats(row)) 

Если вы хотите лучшую обработку локализации, я предлагаю вам конвертировать все номера используя babel.numbers упаковка.

+0

Не будут ли они закодированы как строки в csv? IE цитируется и интерпретируется как строки другим программным обеспечением? – maniexx

+0

Они не будут указаны при установке ';' в качестве разделителя. – skovorodkin

+0

Я не знаю, как другое программное обеспечение будет обрабатывать такой формат. ИМО легче выводить числа как есть, а затем локализовать их, когда вам это действительно нужно (например, в пользовательском интерфейсе). – skovorodkin

Смежные вопросы