у меня проблема, лучше всего продемонстрированная на этой веб-странице 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.
DonÄić
UTF-8 отображается неправильно. Проблема связана со средством просмотра CSV, а не с вашим кодом Python. Убедитесь, что программа просмотра декодирует файл как UTF-8.
Попробуйте явно задать кодировку. Это должно решить вашу проблему. Это сработало для меня.
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')
это сработало для меня! Я подозреваю, что моя комбинация request.get и pandas.read_html является источником забавного случая, который я описал в своем ответе, но тем не менее, спасибо!
будьте готовы принять решение, если оно сработало
ой, извини! Я не знал, что это такое, лол, я просто навел стрелку вверх и подумал, что это все. хотя я это сейчас проверил!
Что вы используете, чтобы открыть
.csv
файл? Возможно, кодировка UTF-8 не установлена при открытии файла.