Кодировка 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 намного проще, поэтому всем, кто будет искать позже, я рекомендую это!

🤔 А знаете ли вы, что...
С Python можно создавать кросс-платформенные приложения для Windows, macOS и Linux.


57
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'

Решено

Использование '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')