Найти - Пользователи
Полная версия: проблемы с csv.DictReader
Начало » Python для новичков » проблемы с csv.DictReader
1 2
Terma1234
При создания словаря значение ключа берется целиком первая строка, а по сути должен создавать ключи из первой строки каждого столбца
Terma1234
Выполнение кода
Terma1234
Таблица
_nemo_
проблема с русификацией csv
в английской версии разделитель ,
в русской кажется ;
там разделитель дополнительно нужно указать как ‘;’
_nemo_
 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'])
py.user.next
_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 и там определены не только разделители полей, но ещё и концы строк и способ экранирования символов.

Поэтому надо быть точно уверенным, какой там формат, чтобы правильно применять модуль, иначе при неправильном применении модуля на каких-нибудь данных там будет какая-нибудь ошибка (потеряются данные или исказятся) и ты об этом даже не узнаешь.
_nemo_
Уважаемый py.user.next,
ну вобщем это дебри уже,
проблема решается если delimer = ;
Как там может быть разделитель ‘,’ если
в русском экселе ‘,’ выполняет другие функции.
py.user.next
_nemo_
ну вобщем это дебри уже,
проблема решается если delimer = ;
Вот смотри, ты ему написал код, который типа работает. А как ты можешь доказать, что этот код не потеряет втихушку какие-нибудь его данные? Вот речь вот про это. То, что он их через модуль csv начал разбирать, это ещё ничего не значит, он мог и ошибиться.

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

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

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

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

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

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

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

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