Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 4, 2017 15:00:47

Terma1234
Зарегистрирован: 2016-03-20
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

проблемы с csv.DictReader

При создания словаря значение ключа берется целиком первая строка, а по сути должен создавать ключи из первой строки каждого столбца

Отредактировано Terma1234 (Янв. 4, 2017 15:00:57)

Прикреплённый файлы:
attachment сам код.JPG (19,5 KБ)

Офлайн

#2 Янв. 4, 2017 15:02:12

Terma1234
Зарегистрирован: 2016-03-20
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

проблемы с csv.DictReader

Выполнение кода

Прикреплённый файлы:
attachment выполнение.JPG (48,8 KБ)

Офлайн

#3 Янв. 4, 2017 15:02:44

Terma1234
Зарегистрирован: 2016-03-20
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

проблемы с csv.DictReader

Таблица

Прикреплённый файлы:
attachment файл csv.JPG (28,7 KБ)

Офлайн

#4 Янв. 4, 2017 18:33:21

_nemo_
Зарегистрирован: 2017-01-02
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

проблемы с csv.DictReader

проблема с русификацией csv
в английской версии разделитель ,
в русской кажется ;
там разделитель дополнительно нужно указать как ‘;’

Офлайн

#5 Янв. 4, 2017 18:36:42

_nemo_
Зарегистрирован: 2017-01-02
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

проблемы с csv.DictReader

 import csv
with open('e1_table.csv', 'w', newline='') as csvfile:
    wr = csv.writer(csvfile, delimiter=';')
    wr.writerow(['A','B'])
    wr.writerow(['A1', 'B1'])
    wr.writerow(['A2', 'B2'])
    wr.writerow(['A3', 'B3'])

Офлайн

#6 Янв. 5, 2017 02:54:10

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

проблемы с csv.DictReader

_nemo_
в английской версии разделитель ,
в русской кажется ;
CSV (comma separated values) - это определённый формат, который разделяет поля запятыми всегда. Все остальные форматы - это уже не CSV, но так как они похожи на CSV, то их называют CSV, хотя это и неправильно, так как они являются DSV (delimiter separated values).
https://en.wikipedia.org/wiki/Comma-separated_values
https://en.wikipedia.org/wiki/Delimiter-separated_values

Поэтому и в питоне модуль хоть и называется csv, но работает он с разными форматами. Поэтому проблема тут не в том, что русское это или английское, а в том, какой это формат - CSV или не CSV. Даже если разделитель запятая, всё равно это может быть не CSV, потому что CSV точно определён в rfc4180 и там определены не только разделители полей, но ещё и концы строк и способ экранирования символов.

Поэтому надо быть точно уверенным, какой там формат, чтобы правильно применять модуль, иначе при неправильном применении модуля на каких-нибудь данных там будет какая-нибудь ошибка (потеряются данные или исказятся) и ты об этом даже не узнаешь.



Отредактировано py.user.next (Янв. 5, 2017 02:58:18)

Офлайн

#7 Янв. 5, 2017 13:22:40

_nemo_
Зарегистрирован: 2017-01-02
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

проблемы с csv.DictReader

Уважаемый py.user.next,
ну вобщем это дебри уже,
проблема решается если delimer = ;
Как там может быть разделитель ‘,’ если
в русском экселе ‘,’ выполняет другие функции.

Отредактировано _nemo_ (Янв. 5, 2017 13:25:49)

Офлайн

#8 Янв. 5, 2017 14:00:07

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

проблемы с csv.DictReader

_nemo_
ну вобщем это дебри уже,
проблема решается если delimer = ;
Вот смотри, ты ему написал код, который типа работает. А как ты можешь доказать, что этот код не потеряет втихушку какие-нибудь его данные? Вот речь вот про это. То, что он их через модуль csv начал разбирать, это ещё ничего не значит, он мог и ошибиться.

_nemo_
Как там может быть разделитель ‘,’ если
в русском экселе ‘,’ выполняет другие функции.
Эксель вообще не в CSV сохраняет, вот почитай, я всё не читал здесь, но там суть передаётся - что на Excel не надо равняться, потому что они (Microsoft) нарушают стандарты и лепят своё везде, где могут.

А стандарты как раз и нужны для того, чтобы все программы в мире (сегодня, завтра, через 100 лет) могли безошибочно разбирать данные, представленные в определённом задокументированном формате.

Поэтому цена ошибки - это если ты ничего серьёзного не обрабатываешь, ты можешь лепить, конечно, что хочешь, а если это твои данные из больницы или поликлиники обрабатываются? ты как захочешь, чтобы их обрабатывала правильная программа или вот такая тяп-ляп лишь бы работало? Вот то-то и оно. И выпишут тебе талончик куда надо, а там тебя будут лечить три месяца от болезни, которой у тебя нет, с помощью лекарства за 1500 рублей коробочка. Это в лучшем случае, а могут и прооперировать просто так на всякий случай. А потом ты захочешь узнать, а кто же писал эту программу. Заглянешь - а это ты сам её писал :)



Отредактировано py.user.next (Янв. 5, 2017 14:07:40)

Офлайн

#9 Янв. 5, 2017 14:53:05

_nemo_
Зарегистрирован: 2017-01-02
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

проблемы с csv.DictReader

py.user.next

А как ты можешь доказать, что этот код не потеряет втихушку какие-нибудь его данные?

Что там можно потерять… там все просто как автомат калашникова… ячейки построчно, разделенные ‘;’

Эксель вообще не в CSV сохраняет, вот почитай

ага… понятно… я тогда говорю о стандарте SCSV
Ну вобщем- то да, вопрос тестирования кода на ‘живучесть’ непростой

Офлайн

#10 Янв. 5, 2017 15:57:00

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

проблемы с csv.DictReader

_nemo_
Что там можно потерять
Я как-то делал индусу одному фигню одну, наверное век теперь не забуду, так вот там надо было индусский язык древний переводить из Интернета вот в такой CSV, и там эти символы образовывали такой хаос, в этих полях были тексты целые на много строк и всё на юникодовом индусском. Там реально даже не поймёшь, если какой-то символ сотрётся. А CSV как раз может сохранять любые данные точно, что потом восстановишь из этого именно то, что и сохранял.

_nemo_
ячейки построчно, разделенные ‘;’
Вот именно, что ты думаешь, что там всё будет построчно всегда, а оно может хранить много строк в одном поле, формат CSV это разрешает и всё правильно хранит.



Отредактировано py.user.next (Янв. 5, 2017 15:58:44)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version