Julian 🏳️‍🌈
Их тип вернее
koder
Ваше право. Просто аргументации нет никакой, кроме как пайшарм что-то там магически вывел. Рантайм чеков в cpython нет. И не будут вероятно никогда. Поэтому аннотации не помогут избежать ошибок с помощью какой-то магии.
прочтите документацию, прежде чем такой бред писать. И что такое типизация и как она работает (не обязательно в питоне). Это и будет аргументация
maxlunar
если вы пытаетесь прикрутить типизацию к питону, лучше свалить в другой язык. Rust или Go, например
🍁 Jaŭhien
koder
если вы пытаетесь прикрутить типизацию к питону, лучше свалить в другой язык. Rust или Go, например
Не лучше. Уже давно прикрутили, радостно пользуются. Код стал куда лучше, стандартная либа и кучу либ вокруг нее тилизированны. AttributeError я в своем коде уже примерно год не видел
🍁 Jaŭhien
Это прямо фишечка всех новых библиотек - полное покрытие тайп хинтами
koder
И TypeError туда же (почти не видел)
koder
Это прямо фишечка всех новых библиотек - полное покрытие тайп хинтами
полное таки не всегда выходит, местами скипают или ставят typing:ignore, но да, все туда идет
Anonymous
Привет. Прошу помощи. Получаю имя файла из заголовка content-disposition, там кирилица, print выдает кракозябры. #!/usr/bin/env python3 import requests def get_filename_from_cd(cd): """ Имя файла из заголовка content-disposition """ fname = re.findall('filename=(.+)', cd) return fname[0] r = requests.get(url, allow_redirects=True) filename = get_filename_from_cd(r.headers.get('content-disposition')) print(filename)
Julian 🏳️‍🌈
А, или на сайте кодировка CP1251
Julian 🏳️‍🌈
Классика
Anonymous
Возможно у тебя консолька не поддерживает кирилицу
Да вот в том то и дело, проверял при помощи curl -Iv -L url
koder
Да вот в том то и дело, проверял при помощи curl -Iv -L url
какой тип возвращает r.headers.get('content-disposition') - bytes или str?
Anonymous
В ответе кирилические символы отображаются нормально в консольке
koder
если bytes - см коммент выше, наверное приходит в другой кодировке, нужно брать кодировку из заголовков и руками декодить
Anonymous
Так, значит мне надо кодировать в utf-8, а затем в windows-cp1251, типа того?
koder
Так, значит мне надо кодировать в utf-8, а затем в windows-cp1251, типа того?
достаточно декодировать в юникод один раз и его печатать - в кодировку консоли питон сам переведет
koder
хотя я с виндой не работаю, но, вроде, должно быть так
koder
в линухе так
Anonymous
пишу .encode('utf-8'), оно выводит \xc3\x90 и т.д. использую линукс
Julian 🏳️‍🌈
может наоборот decode
Anonymous
Выходит, что в заголовке что-то кроме utf-8?
koder
может наоборот decode
+1, не нужно encode - это ты перевел unicode в utf-8
koder
Выходит, что в заголовке что-то кроме utf-8?
какой тип возвращает r.headers.get('content-disposition')?
Über
кто может сделать из ру ехе?
Über
прост шиндовс ошибками замучал
Über
шоб запустить и затестить
Über
https://pastebin.com/0Ek0NWtK
Über
вот это
Über
чтоб запустить на винде
Über
без установки питона
Über
0xc000007b
Julian 🏳️‍🌈
сильно
Julian 🏳️‍🌈
Узнаю винду
Über
7
Über
директ сносил и ставил
Julian 🏳️‍🌈
Шел 2020 год, на Винде все еще не запилил нормальные ошибки
Über
обновы не канают
Вселенский
Блин, вопрос, с чего начать учить?
Über
ну,кто нибудь поможет
Über
?
Über
надо переделать ру в ехе
Über
и все
Über
я гугл уже заебал с ошибками
Über
там через pyinstaller
Über
и подобное
Über
для запуска нужен питон
Über
а я не могу его запустить
Über
ага
Über
обязатенльно
Über
когда не могу юзать pip
Julian 🏳️‍🌈
Блин, вопрос, с чего начать учить?
Имхо пробуй что-то писать, попутно смотря ролики того курса. Ну и когда что-то будет не хватать, смотри в документацию.
Über
бля
Über
я вщ хз как объяснить
koder
<class 'str'>
тогда дофига странно. получается что requests получил bytes и декодировал их в unicode какой-то кривой кодировкой (наверное utf). И это сработало, но теперь буквы поломались. А попробуй действительно делать print(r.headers.get('content-disposition').encode('utf-8').decode("cp-1251")) и заодно глянь на все заголовки import pprint pprint.pprint(r.headers)
Anonymous
тогда дофига странно. получается что requests получил bytes и декодировал их в unicode какой-то кривой кодировкой (наверное utf). И это сработало, но теперь буквы поломались. А попробуй действительно делать print(r.headers.get('content-disposition').encode('utf-8').decode("cp-1251")) и заодно глянь на все заголовки import pprint pprint.pprint(r.headers)
1) print(r.headers.get('content-disposition').encode('utf-8').decode("cp-1251")) LookupError: unknown encoding: cp-1251) 2) <class 'NoneType'> {'Server': 'nginx', 'Date': 'Sun, 21 Jul 2019 23:45:45 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=20', 'Expires': '0', 'Pragma': 'no-cache', 'Last-Modified': 'Sun, 21 Jul 2019 23:45:45 GMT', 'Cache-Control': 'no-cache,no-store,max-age=0,s-maxage=0,must-revalidate', 'X-Frame-Options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'Set-Cookie': 'lastdl=1563752745; expires=Fri, 19-Jul-2024 23:45:45 GMT; Max-Age=157680000; path=/; domain=.sendspace.com', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding'} Здесь почему-то показывает content-type html, скорее всего нужно как-то указать, чтоб редиректы работали Вот url: https://fs13n2.sendspace.com/dl/076abf9fa1aa4310a4098c42e1f60ca7/5d34f89c0bc9a849/hs91ng/%D0%B8%D0%BC%D1%8F%20%D1%84%D0%B01%D0%BB%D0%B0%202782%20%D0%B8%D0%BC%D1%8F.zip
koder
1) print(r.headers.get('content-disposition').encode('utf-8').decode("cp-1251")) LookupError: unknown encoding: cp-1251) 2) <class 'NoneType'> {'Server': 'nginx', 'Date': 'Sun, 21 Jul 2019 23:45:45 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=20', 'Expires': '0', 'Pragma': 'no-cache', 'Last-Modified': 'Sun, 21 Jul 2019 23:45:45 GMT', 'Cache-Control': 'no-cache,no-store,max-age=0,s-maxage=0,must-revalidate', 'X-Frame-Options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'Set-Cookie': 'lastdl=1563752745; expires=Fri, 19-Jul-2024 23:45:45 GMT; Max-Age=157680000; path=/; domain=.sendspace.com', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding'} Здесь почему-то показывает content-type html, скорее всего нужно как-то указать, чтоб редиректы работали Вот url: https://fs13n2.sendspace.com/dl/076abf9fa1aa4310a4098c42e1f60ca7/5d34f89c0bc9a849/hs91ng/%D0%B8%D0%BC%D1%8F%20%D1%84%D0%B01%D0%BB%D0%B0%202782%20%D0%B8%D0%BC%D1%8F.zip
ну в урле имя файла в utf8, по заголовкам тоже, вроде, utf-8. Странно как-то. Может таки консоль странная и питон этого не понля? Что 'set | grep LC' показывает? А попробуй имя файла из content-disposition закодировать в utf-8, напечатать и посмотреть - будет ли с именем файла из url совпадать
Anonymous
ну в урле имя файла в utf8, по заголовкам тоже, вроде, utf-8. Странно как-то. Может таки консоль странная и питон этого не понля? Что 'set | grep LC' показывает? А попробуй имя файла из content-disposition закодировать в utf-8, напечатать и посмотреть - будет ли с именем файла из url совпадать
Возможно, скрипт на сервере просто. MAILCHECK=60 for i in $(LC_ALL=C $prog --help); for i in $(LC_ALL=C $prog --usage); local LC_CTYPE=C; __grubcomp "$(LC_ALL=C $prog --help | awk -F ":" '/available formats/ { print $2 }' | sed 's/, / /g')"; __grubcomp "$(LC_ALL=C $prog --help | awk -F "[()]" '/--target=/ { print $2 }' | sed 's/|/ /g')"; COMPREPLY+=($( compgen -W "$( { LC_ALL=C ifconfig -a || ip addr show; } 2>/dev/null | command sed -ne 's/.*addr:\([^[:space:]]*\).*/\1/p' -ne 's|.*inet[[:space:]]\{1,\}\([^[:space:]/]*\).*|\1|p' )" -- "$cur" )) local argtype=$( LC_ALL=C $1 --help 2>&1 | command sed -ne "s|.*$prev\[\{0,1\}=[<[]\{0,1\}\([-A-Za-z0-9_]\{1,\}\).*|\1|p" ); COMPREPLY=($( compgen -W "$( LC_ALL=C $1 --help 2>&1 | command sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}=\{0,1\}\).*/\1/p' | sort -u )" -- "$cur" )); COMPREPLY+=($( { LC_ALL=C ifconfig -a || ip link show; } 2>/dev/null | command sed -ne "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($re\)[[:space:]].*/\1/p" -ne "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($re\)[[:space:]]*$/\1/p" -ne "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($re\)[[:space:]].*|\2|p" -ne "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($re\)[[:space:]]*$|\2|p" LC_ALL=C "$( dequote "$cmd" )" ${2:---help} 2>&1 LC_ALL=C "$( dequote "$cmd" )" ${2:---usage} 2>&1
Anonymous
> А попробуй имя файла из content-disposition закодировать в utf-8, напечатать и посмотреть - будет ли с именем файла из url совпадать Просто скопировать кракозябры и кодировать в utf-8?
koder
Возможно, скрипт на сервере просто. MAILCHECK=60 for i in $(LC_ALL=C $prog --help); for i in $(LC_ALL=C $prog --usage); local LC_CTYPE=C; __grubcomp "$(LC_ALL=C $prog --help | awk -F ":" '/available formats/ { print $2 }' | sed 's/, / /g')"; __grubcomp "$(LC_ALL=C $prog --help | awk -F "[()]" '/--target=/ { print $2 }' | sed 's/|/ /g')"; COMPREPLY+=($( compgen -W "$( { LC_ALL=C ifconfig -a || ip addr show; } 2>/dev/null | command sed -ne 's/.*addr:\([^[:space:]]*\).*/\1/p' -ne 's|.*inet[[:space:]]\{1,\}\([^[:space:]/]*\).*|\1|p' )" -- "$cur" )) local argtype=$( LC_ALL=C $1 --help 2>&1 | command sed -ne "s|.*$prev\[\{0,1\}=[<[]\{0,1\}\([-A-Za-z0-9_]\{1,\}\).*|\1|p" ); COMPREPLY=($( compgen -W "$( LC_ALL=C $1 --help 2>&1 | command sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}=\{0,1\}\).*/\1/p' | sort -u )" -- "$cur" )); COMPREPLY+=($( { LC_ALL=C ifconfig -a || ip link show; } 2>/dev/null | command sed -ne "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($re\)[[:space:]].*/\1/p" -ne "s/.*[[:space:]]HWaddr[[:space:]]\{1,\}\($re\)[[:space:]]*$/\1/p" -ne "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($re\)[[:space:]].*|\2|p" -ne "s|.*[[:space:]]\(link/\)\{0,1\}ether[[:space:]]\{1,\}\($re\)[[:space:]]*$|\2|p" LC_ALL=C "$( dequote "$cmd" )" ${2:---help} 2>&1 LC_ALL=C "$( dequote "$cmd" )" ${2:---usage} 2>&1
о боже, что там с настройками кодировки то, должно быть что-то в духе LC_CTYPE=en_US.UTF-8, а у тебя 'С' стоит, которая, вроде ascii, хотя я тут не очень
Anonymous
print(r.headers.get('content-disposition').encode('utf-8')) AttributeError: 'NoneType' object has no attribute 'encode'
Anonymous
там еще функция get_filename_from_cd
Anonymous
она парсит именно имя файла из заголовка
koder
print(r.headers.get('content-disposition').encode('utf-8')) AttributeError: 'NoneType' object has no attribute 'encode'
так, тут, ожидаемо, написанно что content-disposition у тебя нет в заголовках (а его там нет, я думал может request его симулирует)
Anonymous
а в консоли print('Привет') выдает нормально
Anonymous
Вот так принт выдает кракозябры. Если заенкодить filename в utf-8, то получается нормально. Значит, filename - в кодировке отличной от utf-8? filename = get_filename_from_cd(r.headers.get('content-disposition')) print(filename)
koder
можно просто в консоли
Anonymous
> сори, я потерялся. То r.headers.get(..) выдает None, то строку Разные url были. Вообще странно, 1 url выдает None, другой другое
Anonymous
разные url одного сервиса sendspace.com
koder
сори, я хз что у тебя :( мои идеи кончились
Anonymous
сори, я хз что у тебя :( мои идеи кончились
:( Все равно спасибо за помощь :)