Найти - Пользователи
Полная версия: Поиск по файлу и отображение
Начало » Python для новичков » Поиск по файлу и отображение
1 2 3 4
s0rg
n2b
а в каком контексте писать del sfw?
Если нужно удалить всю секцию целиком )
n2b
Уважаемый s0rg и другие уважаемые питонеры, а можно Вас спросить, что нужно добавить во все функции что мне написал товарищ s0rg (за что ему огромное спасибо), чтобы везде кодировка была utf-8, ибо блокнотовский файл в винде cp1251. Не спрашивайте почему нельзя перевести в Utf-8 блокнотовский файл, ибо разумного ответа не получите, так как все 5 файлов перевел в utf-8 и только 3 из них правильно работают. Остальные все равно читаются как cp1251. Заранее большое спасибо!
s0rg
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')
...
n2b
def write_regexp(file, table, regexp):
result = list()
store = False
with open(file) as fd:
А вот тут как сделать кодировку Utf-8?
s0rg
Можно еще упростить:
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’
n2b
У меня вот такие функции:
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
s0rg
А в чем проблема воспользоваться объектом?
n2b
А, понял :) Щас попытаюсь сделать.

Большое спасибо за ответы.
n2b
fd = open('somefile2.utf8', ‘w’)
data = repr(sfw).encode('utf8')

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

Не, не понимаю.
Мне просто нужно открыть файл и преобразовать его в utf-8 без использования sfw… (функции писал чуть выше get_regexp и write_regexp)
s0rg
fd = open("somefile") # Открыли файл
data = fd.read() #прочитали
data =data.decode('utf8') #преобразовали кодировку
sfw.load_string(data) #скормили в обьект
'''
основной код
'''
data = repr(sfw) # получили представление объекта
data = data.encode('utf8') # вспомнили про кодировку
fd.write(data) # записали
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB