Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

15.07.2009, 14:29
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
Я знаю, что такoe 'encoding', но зачем писать encoding=encoding, разве это нельзя опустить?
Зависит от порядка передачи аргументов в ф-цию, если передаем не по порядку определенном в прототипе дк так и надо писать )
|
|
|

15.07.2009, 14:38
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
В py3k по умолчанию идет чтение. Во-вторых, там порядок такой (имя, режим, кодировка= ). Так что это там ни при чем )
encoding = encoding..я теперь спать не буду  ответь мне!
|
|
|

15.07.2009, 14:44
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Сообщение от razb
Зависит от порядка передачи аргументов в ф-цию, если передаем не по порядку определенном в прототипе дк так и надо писать )
Ты прафф, я привык к некоей недисциплинированности, часть параметров передаю по порядку, часть по именованию, когда как короче
P.S. Только что разбирался с кодировками в py3k все немного не так как я представлял, немного парят танцы с бубном. В качестве внутреннего отображения выбран utf8 , я привык его считать отличным от юникода, поэтому мои надежды на красивое string_in_utf8 = inside_string.encode("utf8") разбились в прах, приходится шаманить и сначала переводить в байты, а потом в нужную кодировку string_in_cp1251 = inside_string.encode("utf8").decode("cp1251")
Чет как-то не так как хотелось бы
|
|
|

15.07.2009, 14:48
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Сообщение от Fata1ex
В py3k по умолчанию идет чтение. Во-вторых, там порядок такой (имя, режим, кодировка= ). Так что это там ни при чем )
encoding = encoding..я теперь спать не буду  ответь мне!
Ну почему же, он прав, просто я не указываю режим работы с файлом, ибо мне нужно чтение, поэтому приходится указывать параметры функции кусками, т.е. по хорошему это должно выглядеть либо open(file="bla.txt", encoding="cp1251"), либо open("bla.txt", "r", None, "cp1251"), я юзаю недисциплинированно-гибридный вариант open("bla.txt", encoding="cp1251") , оставляя значение режима работы с файлом по умолчанию, каюсь, обязательно исправлюсь (если не забуду  )
P.S. порядок там такой
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
Последний раз редактировалось login999; 15.07.2009 в 14:53..
|
|
|

15.07.2009, 18:20
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
По-моему, ты написал ровно тоже что и я  и не ответил на главный вопрос!
Похоже, что я непонятно задаю вопрос. Зачем ты пишешь:
Код:
open("bla.txt", encoding=encoding)
open(outfile, "a", encoding=encoding)
Когда можно:
Код:
open("bla.txt")
open(outfile, "a")
я привык его считать отличным от юникода
Unicode Transformation Format 
Последний раз редактировалось Fata1ex; 15.07.2009 в 18:33..
|
|
|

15.07.2009, 18:51
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Сообщение от Fata1ex
По-моему, ты написал ровно тоже что и я  и не ответил на главный вопрос!
Похоже, что я непонятно задаю вопрос. Зачем ты пишешь:
Код:
open("bla.txt", encoding=encoding)
open(outfile, "a", encoding=encoding)
Когда можно:
Код:
open("bla.txt")
open(outfile, "a")
Unicode Transformation Format 
Ы )
Теперь понял )
Я указываю питону кодировку файла, из которой ему перегонять в utf8 (мну кагбэ привык к тому что в файлах не всегда находится латиница), и когда потом работаю с этими данными, то уже 100 % знаю, что они в utf8, и с какой кодировкой мне работать, как пример, то обрати внимание на то то я тебе скинул в ПМ, это контейнер, я указываю кодировку только когда в него что-либо гружу, потом я уже 100 % знаю с какой кодировкой я работаю, и не мучаюсь с этим вопросом, П.С. Сие есть одна из траблов кроссплатформа
Короткий вариант :
Я читаю из файла который в одной кодировке, а другой файл открываю на запись в другой кодировке.
Действует так:
Открываю файл cp1251.txt , указывая питону что он работает с кодировкой cp1251, он перегоняет данные в нем из cp1251 в utf8 (используется для внутреннего представления), потом я открываю файл utf8.txt с правами на добавление в конец файла и указываю что питону нужно писать в него в кодировке utf8, и он пишет туда файл в utf8, то есть перекодирование осуществляется интерпритатором автоматически, и я не изьебываюсь на эту тему
open("bla.txt") открывает файл для чтения/записи в кодировке utf8, мне же нужно записать в другой...
Последний раз редактировалось login999; 15.07.2009 в 18:56..
|
|
|

15.07.2009, 19:01
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
Разве нельзя изменить кодировку без encoding=encoding после открытия файла и записать в нужной?
|
|
|

15.07.2009, 20:03
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Сообщение от Fata1ex
Разве нельзя изменить кодировку без encoding=encoding после открытия файла и записать в нужной?
Можно. Но так удобней.
Смысл лишних телодвижений + отслеживания всех своих действий с ними , если можно просто сделать encoding=encoding ?
|
|
|

15.07.2009, 21:40
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
В той же степени лишними телодвижениями можно назвать encoding=encoding  просто меня удивила конструкция, я не придираюсь )
|
|
|

15.07.2009, 23:11
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Сообщение от Fata1ex
В той же степени лишними телодвижениями можно назвать encoding=encoding  просто меня удивила конструкция, я не придираюсь )
Честно говоря не вижу ничего удивительного в том, чтобы использовать то что упрощает мне жизнь  .Тем более что с кодировками у начинающих постоянно вылазят траблы, для меня то это вообще был жуткий кошмар, на словах все вроде просто, а на деле траблы вылазят почему-то.
Просто вместо того чтобы заниматься перекодированием после загрузки, лучше этот момент затронуть сразу же при загрузке, дабы потом не теряться, особенно напрягает это когда данные в софт загружаются из нескольких источников из одной кодировки а отправляются в другой кодировке, выводить это нужно в терминал/гуй в третьей кодировке, дабы не было проблем, классический пример - спамер, где в него данные грузятся из cp1251, отправляются в utf8, а в консоль/Gui нужно выводить в unicode , это относится к 2.6.2 , попробуй сделать в виндовой консоли три print (в 2.6.2 это имеется ввиду строка вида u"Кириллица", строку в utf8 и строку в cp1251) ,а потом глянь на результат, тогда поймешь из-за чего траблы с кодировкой и откуда такая радость по поводу encoding=encoding. Вот то что я тебе прислал в 2.6 занималось тем что хранило в себе юникод, т.е. я тупо дал ему хэндлер на последовательность/итератор, указал кодировку и он его загрузил в себя, после чего я не парюсь на тему с какой кодировкой я работаю, а теперь представь себе цепочку преобразований/запоминаний, которые необходимы для того чтобы обходиться без таких как, никто не говорит что они незаменимы, они упрощают жизнь, и представь реакцию того, кто только взялся за 2.6 Python и у него в консоли лезут крякозябры, а он не может толком вьехать в причину сего трабла. То что сейчас кажется элементарным тогда мну заставляло чуть ли не в истерике биться, ибо на все вопросы отправляли в гугл, а сам вьехать не мог.
P.S. Есть два нюанса:
1. Я самоучка
2. Ситуация с такими манипуляциями (имеется ввиду ручное перекодирование) хороша только в мелочах, дальше удобнее и лучше юзать единое кодирование для внутреннего представления, которого в 2.6 не было, для чего и придумывалось куча велосипедов, и из-за чего такое появилось в 3.1.
Последний раз редактировалось login999; 15.07.2009 в 23:16..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|