
15.07.2009, 12:24
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Сообщение от Fata1ex
Если оставлять его необязательным, то увеличивается гибкость программы, так как во время открытия файла возможно использование любой кодировки. По-моему так 
Кодировки есть грабли, через которые проходят очень многоие (я в свое время очень конкретно намучился с этим, да и не один я), просто за счет того чтобы сделать его обязательным (имется ввиду убрать значение по умолчанию), то гибкость не страдает, так как можно выбрать любую, зато отпадает куча вопросов и проблем на тему "А почему у меня крякозябры показывает", айс в py3k то что для внутреннего представления выбран юникод, в 2.6 я делал всем загрузкам из файлов вручную перекодирование в юникод, получалась конкретная путаница
Чтоб не быть голословным:
Код:
......
def load(self, data, data_encoding=None):
if data_encoding is None:
data_encoding = self.defaultencoding
self.Lock.acquire()
for line in data:
self.Container.append(line.translate(None, "\r\n").decode(data_encoding, "replace"))
if self.StringVar is not None:
try:
self.StringVar.set(len(self.Container))
except RuntimeError:
pass
self.Lock.release()
......
def dump(self, outfile, data_encoding=None, remove=False):
if data_encoding is None:
data_encoding = self.defaultencoding
self.Lock.acquire()
with open(outfile, "a") as out:
for item in self.Container:
out.write("{0}\n".format(item.encode(data_encoding, "replace")))
if remove:
self.Container = []
if self.StringVar is not None:
try:
self.StringVar.set(len(self.Container))
except RuntimeError:
pass
self.Lock.release()
......
Последний раз редактировалось login999; 15.07.2009 в 12:27..
|
|
|

15.07.2009, 12:32
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
В том-то и дело, чтобы на эти грабли не наступать, сделали значение опциональным. Во многих случаях не важно с какой кодировкой работать.
# ps. код это ваще пэпэцэ 
|
|
|

15.07.2009, 12:41
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Сообщение от Fata1ex
В том-то и дело, чтобы на эти грабли не наступать, сделали значение опциональным. Во многих случаях не важно с какой кодировкой работать.
# ps. код это ваще пэпэцэ 
Вот так это выглядит в py3k (от StringVar отказался, так как встроил Thread-safe счетчики в гуй  )
Код:
......
#Сюда нужно отправлять что типа такого
#with open("bla.txt", encoding=encoding) as inpt:
#some.load(inpt)
#Атрибут загрузки из последовательности(или итератора)
def load(self, data):
self.__Lock.acquire()
for line in data:
self.__Container.append(line.strip("\r\n"))
self.__Lock.release()
......
#Атрибут дампа всех элементов контейнера в файл
def dump(self, outfile, encoding):
self.__Lock.acquire()
with open(outfile, "a", encoding=encoding) as out:
for item in self.__Container:
out.write("{0}\n".format(item))
self.__Lock.release()
......
|
|
|

15.07.2009, 12:47
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
|
|
|

15.07.2009, 12:50
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Сообщение от Fata1ex
эээ?
encoding имеется ввиду кодировка, пусть будет encoding="utf8", если так понятнее
Код:
#with open("bla.txt", encoding="utf8") as inpt:
#some.load(inpt)
|
|
|

15.07.2009, 14:09
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
Я знаю, что такoe 'encoding', но зачем писать encoding=encoding, разве это нельзя опустить?
|
|
|

15.07.2009, 14:29
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
Я знаю, что такoe 'encoding', но зачем писать 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:38
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
В py3k по умолчанию идет чтение. Во-вторых, там порядок такой (имя, режим, кодировка= ). Так что это там ни при чем )
encoding = encoding..я теперь спать не буду  ответь мне!
|
|
|

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..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|