(Untitled)

Sep 25, 2016 21:40

Вот есть кусочек кода:

import sys, struct

datafile = open(sys.argv[1], "r")

img = datafile.read()
Аргументом скрипту передается имя файла с hexdump-ом неважно чего. Просто маленький hexdump размером 242 байта. Питон 2.7 нормально воспринимает конструкцию, открывает и читает файл, а потом обрабатывает по желанию писателя скрипта. А вот третий ( Read more... )

Leave a comment

Comments 20

starcat13 September 25 2016, 18:49:39 UTC
(пафосно) 21 век, unicode новое умолчание! :)

Reply

l2tp September 25 2016, 18:51:08 UTC
"Повбивав би"(с)

Это что, теперь, чтобы прочитать файл как набор байтов, надо извращаться? Совсем подурели

Reply

starcat13 September 25 2016, 20:24:29 UTC
Учитывая кол-во софта, который до сих пор криво работает с не-ASCII символами - то я автора Питона даже несколько понимаю.
"не хотите добровольно - придеться вот так!"

Reply

starcat13 September 25 2016, 20:27:09 UTC
http://horstmann.com/unblog/2016-05-06/ - из "веселья" с кодировками.

Reply


vlad_rulez September 25 2016, 19:29:11 UTC
В третьем питоне все строки unicode по умолчанию.
Поэтому пишем:

with open(sys.argv[1], "rb") as datafile:
    img = datafile.read()

Reply

l2tp September 25 2016, 19:31:14 UTC
Но зачем усложнять-то?

Или нынче питон в основном позиционируется как средство для обработки текстовых файлов в формате unicode?

UPD Патчик для скрипта под третий питон находится на раз-два, вопрос в том, зачем и почему меняется "поведение по умолчанию"

Reply

vlad_rulez September 25 2016, 19:45:52 UTC
Это просто один из способов заставить разработчиков работать с юникодом. Иначе они его игнорят и работают с обычными строками.

Reply


e1am0 September 25 2016, 20:03:33 UTC
datafile = open(sys.argv[1], "rb"), не?
ЗЫ. видел этот пост без каментов )). а ваще питон адски несовместим между 2 и 3. боюсь представить, что будет в 4

Reply

l2tp September 25 2016, 20:20:27 UTC
Не, гуглить-то я умею. Меня больше интересует вопрос "зачем и почему" такое поведение у третьего питона. Ну на хера ж менять дефолтное поведение, тем более, такие вечные вещи

Reply

e1am0 September 25 2016, 20:24:18 UTC
выше ответили. собственно логика примерно аналогична передаче файла в фтп.
я правда в 3ем не живу, просто примериваюсь на случай как обычно внезапного переезда вчера.
но навскидку именно обработка текста будет на высоте и без штатного гемороя с декоде андекоде в не очень понятных местах и зависимости вывода кракозябр от потока вывода

Reply

l2tp September 25 2016, 21:03:13 UTC
http://horstmann.com/unblog/2016-05-06/

Про кодировки и кракозябры

Reply


norguhtar September 26 2016, 03:47:13 UTC
Добро пожаловать в светлый мир unicode! На самом деле правильное начинание, так-как всякие нюансы исчезают с тем какая кодировка стоит на машине.

Reply


andrewkochetkov September 26 2016, 06:37:56 UTC
Потому что на самом деле, когда ты пишешь open(..., "r"), предполагается, что ты пишешь open(..., "rt"). И питон тут при делах только потому, что он treat'ит "t" как utf-8. Это не неожиданное поведение, просто "r(t)" всегда прокатывало до utf-8, хотя это всё равно было неправильно.

Reply

l2tp October 7 2016, 20:41:01 UTC
Лучшее пояснение, спс

Reply


Leave a comment

Up