Кодировка Python utf-8 с помощью панд

у меня проблема, лучше всего продемонстрированная на этой веб-странице https://www.basketball-reference.com/draft/NBA_2018.html, которая для каждого document.charset закодирована в 'utf-8'. я использую следующий код

html = requests.get("https://www.basketball-reference.com/draft/NBA_2018.html", headers = {"User-Agent": "XY"}).content
df_list = pandas.read_html(html)

в этот момент df_list[0] правильно отображает в консоли имя третьего игрока как Дончич. ок, пока все хорошо, но я хочу вывести эту таблицу в файл csv, поэтому я и делаю

with open('C:/Users/Eric/br2.csv', 'a', encoding='utf-8') as f:
 df_list[0].to_csv(f, header=True, encoding='utf-8')

который печатает имя как DonÄić. это также происходит, если я использую кодировку «utf-8-sig», открытие вообще не работает, если я использую кодировку «latin1» или не добавляю к ней кодировку. если я попытаюсь просто распечатать вместо использования .to_csv, я все равно получу DonÄić. если я использую request.get().text, в конечном итоге это будет DonÂi‡.

мой вопрос: я получил информацию, извлеченную и правильно отформатированную в Python, как ее правильно отформатировать в файле?

Спасибо!

отредактировано и добавлено: благодаря Милошу и Марку я обнаружил, что происходит что-то гораздо более странное, ха-ха. если я попытаюсь использовать Excel или Блокнот с кодировкой utf-8, они все равно не отобразят ее правильно, но я вижу ее правильно в Open Office с кодировкой utf-8. это не самое странное. самое странное то, что если я скопирую эту строку Луки Дончича в блокнот и сохраню ее как новый CSV, Excel и Блокнот покажут ее правильно при открытии с кодировкой utf-8. насколько я могу судить, что-то в функции Python to.csv просто создает странный CSV, что кажется невозможным, но обойти это невозможно, лол. в любом случае решение chitown88 намного проще, поэтому всем, кто будет искать позже, я рекомендую это!

Что вы используете, чтобы открыть .csv файл? Возможно, кодировка UTF-8 не установлена ​​при открытии файла.

Milos Stojanovic 28.06.2024 23:05

Проверил, сохраняется правильно. Я думаю, проблема в программе, которую вы используете для открытия файла .csv. Попробуйте установить кодировку UTF-8.

Milos Stojanovic 28.06.2024 23:22
DonÄić UTF-8 отображается неправильно. Проблема связана со средством просмотра CSV, а не с вашим кодом Python. Убедитесь, что программа просмотра декодирует файл как UTF-8.
Mark Tolonen 29.06.2024 07:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте явно задать кодировку. Это должно решить вашу проблему. Это сработало для меня.

html = requests.get("https://www.basketball-reference.com/draft/NBA_2018.html", headers = {"User-Agent": "XY"}).content

# Add this line to your code
html.encoding = 'utf-8'

у меня это не сработало, но спасибо за попытку!

Eric 29.06.2024 22:43
Ответ принят как подходящий

Использование 'utf-8-sig' сработало нормально.

import pandas

df = pandas.read_html("https://www.basketball-reference.com/draft/NBA_2018.html", header=1)[0]
df.to_csv('output.csv', encoding='utf-8-sig')

это сработало для меня! Я подозреваю, что моя комбинация request.get и pandas.read_html является источником забавного случая, который я описал в своем ответе, но тем не менее, спасибо!

Eric 29.06.2024 22:42

будьте готовы принять решение, если оно сработало

chitown88 01.07.2024 14:35

ой, извини! Я не знал, что это такое, лол, я просто навел стрелку вверх и подумал, что это все. хотя я это сейчас проверил!

Eric 02.07.2024 02:08

Другие вопросы по теме