Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2011 11:47:39

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

n2b
а в каком контексте писать del sfw?
Если нужно удалить всю секцию целиком )

Офлайн

#2 Янв. 16, 2012 22:01:46

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

Уважаемый s0rg и другие уважаемые питонеры, а можно Вас спросить, что нужно добавить во все функции что мне написал товарищ s0rg (за что ему огромное спасибо), чтобы везде кодировка была utf-8, ибо блокнотовский файл в винде cp1251. Не спрашивайте почему нельзя перевести в Utf-8 блокнотовский файл, ибо разумного ответа не получите, так как все 5 файлов перевел в utf-8 и только 3 из них правильно работают. Остальные все равно читаются как cp1251. Заранее большое спасибо!



Офлайн

#3 Янв. 16, 2012 23:31:51

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

class StrangeFileWorker(dict):
def __init__(self, encoding="utf8"):
self._enc = encoding

def load_file(self, file_name):
with open(file_name) as fd:
self.load_string(fd.read())

def load_string(self, data):
cur_key = ''
data = data.decode(self._enc)
for ln in filter(lambda a: a, data.split('\n')):
if ln.endswith(':'):
cur_key = ln.strip(':')
self.setdefault(cur_key, [])
elif cur_key:
self[cur_key].append(ln)

def __repr__(self):
data = '\n'.join(map(lambda kv: '%s:\n%s\n' % (kv[0], '\n'.join(kv[1])), self.iteritems()))
return data.encode(self._enc)
По-умолчанию - utf8
Если нужно читать/писать в cp1251 то делаем так:
sfw = StrangeFileWorker('cp1251')
sfw.load_file('some_file_in_cp1251')
...

Офлайн

#4 Янв. 17, 2012 00:20:00

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

def write_regexp(file, table, regexp):
result = list()
store = False
with open(file) as fd:
А вот тут как сделать кодировку Utf-8?



Офлайн

#5 Янв. 17, 2012 11:09:35

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

Можно еще упростить:

class StrangeFileWorker(dict):
def load_file(self, file_name):
with open(file_name) as fd:
self.load_string(fd.read())

def load_string(self, data):
cur_key = ''
for ln in filter(lambda a: a, data.split('\n')):
if ln.endswith(':'):
cur_key = ln.strip(':')
self.setdefault(cur_key, [])
elif cur_key:
self[cur_key].append(ln)

def __repr__(self):
return '\n'.join(map(lambda kv: '%s:\n%s\n' % (kv[0], '\n'.join(kv[1])), self.iteritems()))
n2b
А вот тут как сделать кодировку Utf-8?
Для utf8:
sfw = StrangeFileWorker()

# Read
fd = open('somefile.utf8')
data = fd.read().decode('utf8')
sfw.load_string(data)
fd.close()

# Write
fd = open('somefile2.utf8', 'w')
data = repr(sfw).encode('utf8')
fd.write(data)
fd.close()
Для cp1251 - соответственно поменять ‘utf8’ -> ‘cp1251’

Офлайн

#6 Янв. 17, 2012 12:58:47

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

У меня вот такие функции:

def write_regexp(file, table, regexp):
result = list()
store = False
with open(file) as fd:
for line in fd:
line = line.strip(' \n\r:')
if result and not line:
break
if line == table:
store = True
continue
if line == ' ':
file.write(regexp)

def get_regexp(file, table):
result = list()
store = False
with open(file) as fd:
for line in fd:
line = line.strip(' \n\r:')
if result and not line:
break
if line == table:
store = True
continue
if store:
result.append(line)
return result



Офлайн

#7 Янв. 17, 2012 14:30:04

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

А в чем проблема воспользоваться объектом?

Офлайн

#8 Янв. 17, 2012 16:06:37

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

А, понял :) Щас попытаюсь сделать.

Большое спасибо за ответы.



Отредактировано (Янв. 17, 2012 16:06:50)

Офлайн

#9 Янв. 17, 2012 16:15:03

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

fd = open('somefile2.utf8', ‘w’)
data = repr(sfw).encode('utf8')

data это что? fd = открыли файл. А дата никак не относится к файлу… Объясните пожалуйста.

Не, не понимаю.
Мне просто нужно открыть файл и преобразовать его в utf-8 без использования sfw… (функции писал чуть выше get_regexp и write_regexp)



Отредактировано (Янв. 17, 2012 16:16:38)

Офлайн

#10 Янв. 17, 2012 16:54:32

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Поиск по файлу и отображение

fd = open("somefile") # Открыли файл
data = fd.read() #прочитали
data =data.decode('utf8') #преобразовали кодировку
sfw.load_string(data) #скормили в обьект
'''
основной код
'''
data = repr(sfw) # получили представление объекта
data = data.encode('utf8') # вспомнили про кодировку
fd.write(data) # записали

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version