Кодировка в csv файл
Подскажите, какую кодировку в коде нужно указать что бы не было крякозяблов ?
with codecs.open(f'_.csv', 'w+', encoding='utf-8', ) as file: writer = csv.writer(file) writer.writerow( ( 'Продукт', 'Старая цена', 'Новая цена', 'Процент скидки', 'Время акции', ) ) for item in cards: try: card_title = item.find('div', class_='card-sale__title').text.strip() card_discount = item.find('div', class_='card-sale__discount').text.strip() card_price_old_integer = item.find('div', class_='label__price_old').find('span', class_='label__price-integer').text.strip() card_price_old_decimal = item.find('div', class_='label__price_old').find('span', class_='label__price-decimal').text.strip() card_old_price = f'.' card_price_integer = item.find('div', class_='label__price_new').find('span', class_='label__price-integer').text.strip() card_price_decimal = item.find('div', class_='label__price_new').find('span', class_='label__price-decimal').text.strip() card_price_new = f'.' card_sale_data = item.find('div', class_='card-sale__date').text.strip().replace('\n', ' ') with codecs.open(f'_.csv', 'a', encoding='utf-8') as file: writer = csv.writer(file) writer.writerow( ( card_title, card_old_price, card_price_new, card_discount, card_sale_data ) ) except AttributeError: continue print(f'Файл _.cvs успешно записан !')
Python: Кодировка
На самом глубоком уровне компьютер оперирует исключительно цифрами 0 и 1 . Это так называемый двоичный код, а единички и нули называются битами, от «binary digit» — «двоичная цифра».
Обычные, привычные нам числа в десятичной системе исчисления, закодированы с помощью двоичных чисел:
Но как быть с текстом? Компьютер на самом деле не знает ничего о буквах, знаках пунктуации и прочих текстовых символах. Все эти символы так же закодированы числами.
Можно взять английский алфавит и дать каждой букве число, начиная с единицы по порядку:
В этом заключается суть кодировок.
Во время своей работы, программы используют кодировки для преобразования чисел в символы и наоборот. Причём сама программа не имеет представления о смысле этих символов.
- hello → 8 5 12 12 15
- 7 15 15 4 → good
Подобные таблицы, в которых сопоставляются буквы и числа, называются кодировками. Кроме букв алфавита, в таблицы кодировок входят знаки препинания и другие полезные символы. Вы наверняка сталкивались с кодировками, например, ASCII или UTF-8.
Разные кодировки содержат разное количество символов. Изначально небольших таблиц вроде ASCII было достаточно для большинства задач. Но в ней только латинские буквы, несколько простых символов вроде % и ? и специальные управляющие символы типа перевода строки.
С распространением компьютеров, разным странам понадобились свои, более широкие таблицы. В том числе для кириллических букв, восточных иероглифов, арабской вязи, дополнительных математических и типографских символов, а впоследствии даже для эмодзи-смайликов.
Сегодня в большинстве случаев используется один из вариантов юникода, включающий в себя знаки почти всех письменных языков мира.
Задание
В Python можно «запросить» и вывести на экран любой символ из кодировки ASCII. Для этого используется функция chr() . Например:
print(chr(63))
На экран выведется символ с номером 63 — вопросительный знак ? . Таким способом можно выводить любой символ.
Воспользуйтесь таблицей кодов ASCII. В этой таблице нас интересует десятичный код (dec или decimal), которыми кодируются символы.
Используя пример выше и таблицу, выведите на экран (каждый на своей собственной строке) ~ , ^ и % .
(Конечно, можно «обмануть» тесты и просто сделать print(‘~’) и т.д., но так будет совсем неинтересно 🙂
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Определения
- Кодировка — набор символов, закодированных с помощью чисел для представления текста в электронном виде.
КАК УСТАНОВИТЬ КОДИРОВКУ UTF 8 В PYTHON
Установка кодировки utf-8 важна для корректной обработки кириллицы и других символов при работе с Python. Для того чтобы задать кодировку utf-8 в Python, необходимо добавить строку в начало вашего скрипта:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Первая строка в данном примере указывает на то, что скрипт должен быть запущен с помощью Python. Вторая строка — это строка объявления кодировки utf-8, которая говорит Python, как правильно интерпретировать символы при выполнении скрипта.
Также можно использовать другой вариант объявления кодировки. Для этого необходимо использовать строку:
Обе строки объявления кодировки работают одинаково и выбор одной из них остается на усмотрение программиста.
Если вам нужно задать кодировку utf-8 для всех файлов, которые вы используете в своем проекте, можно использовать следующий способ:
Этот код будет работать в Python 2.x. В Python 3.x код должен выглядеть следующим образом:

Как сменить кодировку сайта utf-8 windows 1251
ПРОБЛЕМЫ С КОДИРОВКОЙ. Utf8 в Windows? Кодировка utf8 sublime text
Проблема с кодировкой Python
Уроки Python / Как установить модули в Visual Studio
How to Change File Encoding to UTF-8 in Visual Studio
Как сделать кодировку UTF-8
Программирование на Python — 09 — Строки и Кодировки. ASCII UTF-8
Решение проблемы с кодировкой КИРИЛЛИЦЫ в VSCODE
Python с нуля. Кодировка UTF 8 в Python
КАК ПОМЕНЯТЬ КОДИРОВКУ В VISUAL STUDIO CODE С UTF-8 НА 1251 — ПОЧЕМУ VSCODE ГОВНО IDE #04

BLGPG-24DEAAEB0E6F-23-11-24-19
Новые материалы:
- Импликация в python
- Pygame rect методы
- Pycharm не видит numpy
- Django яндекс карты
- Python парсинг hh ru
- Что учить после python
- Python генератор матрицы
- Blowfish шифрование python
- Как сохранить файл в папку python
- Модуль functools python
- Json в xml python
- Python список в словарь
- Основы алгоритмизации и программирования на python
python как сделать нормальную кодировку
Из командной строки я пишу py pythonfile.py < text.txt
Пытался делать .encode(‘utf-8’) , но получается мусор: 
Отслеживать
Михаил Камахин
задан 21 мая 2020 в 12:47
Михаил Камахин Михаил Камахин
8,680 2 2 золотых знака 16 16 серебряных знаков 55 55 бронзовых знаков
Открыть документ, сохранить как — кодировка ANSI, попробуйте
21 мая 2020 в 12:49
@Стас вот это мне уже нужно делать из питона, потому что я не буду создавать текстовый файл руками, файлы будут создаваться в PHP , конечно можно следить за состоянием файла, но хотелось бы что-то +- универсальное
21 мая 2020 в 12:52
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
f = open(path, 'rb') info = f.read().decode('utf-8') f.close() print("Содержимое файла\n", info)
Тогда не нужно создавать файл в кодировке ANSI
2й вариант: Как сказал insolor, можно открыть сразу в правильной кодировке. У вам указано a=a.encode(‘utf-8’) , измените на file = open(path, «r», encoding=»utf-8″) Готовый вариант:
file = open(path, "r", encoding="utf-8") info = file.read() file.close() print("Содержимое файла\n", info)
Отслеживать
ответ дан 21 мая 2020 в 13:00
2,015 2 2 золотых знака 8 8 серебряных знаков 24 24 бронзовых знака
Если загружаемый файл текстовый, то лучше открывать его как текстовый, сразу с указанием кодировки. Тогда decode при чтении не нужно будет.
21 мая 2020 в 13:11
@insolor а можно в командной строке передать данные о кодировке?
21 мая 2020 в 13:11
@МихаилКамахин Чем вас не устраивает мой способ (в прошлом вашем вопросе), просто добавляете sys.argv[2] и всё. Элемент 0 — путь до программы, 1 — уже использован для передачи путь, и 2 может быть для кодировки
21 мая 2020 в 13:14
@МихаилКамахин все можно, но лучше договориться, чтобы обе части кода (на python и php) всегда использовали одинаковую кодировку (лучше если это будет UTF-8), тогда никаких проблем с кодировкой не будет. Если у вас php скрипт возвращает файл то в одной кодировке, то в другой, то что-то не так с этим скриптом.
21 мая 2020 в 13:15
@МихаилКамахин, так и делайте как показано в этом ответе, а не используйте перенаправление потока ввода из файла ( < ). Если у вас всегда входной файл в UTF-8, то никаких дополнительных параметров с указанием кодировки не нужно - просто указывайте кодировку UTF-8 при открытии файла.
