Форум сайта python.su
def get_regexp(file, table):
sfw = StrangeFileWorker()
result = list()
store = False
fd = open(file) # Открыли файл
data = fd.read() #прочитали
data = data.decode('utf8') #преобразовали кодировку
sfw.load_string(data) #скормили в обьект
for line in data:
line = line.strip(' \n\r:')
if result and not line:
break
if line == table:
store = True
continue
if store:
result = repr(sfw) # получили представление объекта
result = result.encode('utf8') # вспомнили про кодировку
result.append(line)
return result
Офлайн
я не так говорил ))
выложите весь код на pastebin какой-нибудь.
Офлайн
http://pastebin.com/Cux2zWXW
По факту, вся моя проблема в том что у меня не получается сделать exe, из-за этого мне пришлось переделать весь проект под utf-8 (было под cp-1251).
Все файлы у меня в windows блокноте созданы и они будут изменяться. Соответственно мне необходимо во всей программе сделать utf8 также, открытие файлов в utf8, добавление текста в utf8 и т.д. Все добавления, открытия и т.д. происходят в модуле который я выложил на pastebin, т.е. все функции что там написаны мне надо привести в utf8 кодировке.
Отредактировано (Янв. 17, 2012 23:05:47)
Офлайн
Это ужасно, правда.
1. Пестрящая тут и там переменная ‘file’ - хорошо хоть не глобальная
2. Вы по нескольку раз открывает и закрываете файл, зачем? Один раз - прочитали, обработали, внесли изменения в содержимое - закрыли.
3. Вот этот код:
def readfile(path):
file = open(path, 'r')
file = file.readlines()
for i in xrange(len(file) - 1): file[i] = file[i][0:-1]
return file
sfw = StrangeFileWorker()
fd = open("somefile") # Открыли файл
data = fd.read() #прочитали
data =data.decode('utf8') #преобразовали кодировку
sfw.load_string(data) #скормили в обьект
'''
Вот с этого момента - вы забываете про сам файл на диске
можно возвращать / передавать sfw в своих процедурах
Добавить секцию NameTable1:
sfw['NameTable5'] = list()
Добавить в секцию NameTable1 выражение RegExpN2:
sfw['NameTable1'].append('RegExpN2')
Удалить из секции NameTable1 выражение regexp2:
sfw['NameTable1'].remove('regexp2')
Удалить всю секцию NameTable1:
del sfw['NameTable1']
Перебрать все секции:
for section in sfw.iterkeys():
print section
Перебрать все выражения в секции NameTable1:
for reg_exp in sfw['NameTable1']:
print reg_exp
И в конце концов, сохраняем результат:
'''
data = repr(sfw) # получили представление объекта
data = data.encode('utf8') # вспомнили про кодировку
fd.write(data) # записали
fd.close()
Офлайн
Если в файле нет таблицы он выдает KeyError: имятаблицы…
Если в файле перед секции нет пустой строки - опять KeyError: имятаблицы.
Дело видимо в StrangeFileWorker… Так?
p/s
Тот код что не понятен был, он вырезает /n в конце каждой строки. Вырезать два символа вроде пытался, потом еще раз проверю.
Несколько раз один и тот же файл не открывается. У меня 15 файлов.
Огромное спасибо Вам за ответы, благодаря Вам, завеса над работой с файлами немного приоткрывается. А также теперь я точно понял что такое ООП :) Всё благодаря Вам - спасибо!
Отредактировано (Янв. 18, 2012 02:49:27)
Офлайн
n2b
Если в файле нет таблицы он выдает KeyError: имятаблицы…
if 'TableName' in sfw:
print 'Table exists'
n2bДля этого есть .strip()
Тот код что не понятен был, он вырезает /n в конце каждой строки.
n2bДайте пример такого файла.
Если в файле перед секции нет пустой строки - опять KeyError: имятаблицы.
Офлайн
TEST:
regexp
regexp
regexp
regexp
File "C:\Documents and Settings\�������������\My Documents\Aptana Studio 3 Workspace\Data Quality\rwfiles.py", line 84, in get_regexp
data = data.decode('utf8')
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xea in position 17: invalid continuation byte
Отредактировано (Янв. 18, 2012 11:58:05)
Офлайн
# cat test_input2
TEST:
regexp
regexp
regexp
regexp
# ipython
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
In [1]: from test_proc import StrangeFileWorker
In [2]: sf = StrangeFileWorker()
In [3]: sf.load_file('test_input2')
In [4]: sf
Out[4]:
TEST:
regexp
regexp
regexp
regexp
n2bВы уверенны что файлы в utf8?
И еще вот такая ошибка…
Отредактировано (Янв. 18, 2012 12:20:12)
Офлайн
Да я не скопировал файл, я просто показал что нет пустой линии сверху.
В том то и суть, что файлы не в utf-8 поэтому мне и надо делать из них Utf8 при открытии.
s0rg, а у Вас есть скайп? Мне бы 5-10 минут общения с Вами и я уже все бы сразу понял…
Отредактировано (Янв. 18, 2012 12:37:37)
Офлайн
Ушло в PM
Офлайн