Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 17, 2012 20:10:13

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

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

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
Данная измененная функция теперь ничего не делает вообще.
В чем проблема? Сделал все как Вы сказали…



Офлайн

#2 Янв. 17, 2012 21:50:06

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

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

я не так говорил ))
выложите весь код на pastebin какой-нибудь.

Офлайн

#3 Янв. 17, 2012 23:00:20

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

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

http://pastebin.com/Cux2zWXW

По факту, вся моя проблема в том что у меня не получается сделать exe, из-за этого мне пришлось переделать весь проект под utf-8 (было под cp-1251).
Все файлы у меня в windows блокноте созданы и они будут изменяться. Соответственно мне необходимо во всей программе сделать utf8 также, открытие файлов в utf8, добавление текста в utf8 и т.д. Все добавления, открытия и т.д. происходят в модуле который я выложил на pastebin, т.е. все функции что там написаны мне надо привести в utf8 кодировке.



Отредактировано (Янв. 17, 2012 23:05:47)

Офлайн

#4 Янв. 18, 2012 00:08:07

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

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

Это ужасно, правда.
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
Я медитировал на него минут пятнадцать - чтобы понять, что вы, скорее всего, так читаете файл в список строк, удаляя перевод строки.
Вы не закрываете файл (да есть сборщик мусора, но зачем мусорить?)
B конечно же у вас здесь баг - у последней строчки не удаляется перевод строки.
Более того - если вы работаете в win - то в ней переводы строк двухбайтовые ('\r\n')

Но я не смог даже понять, что в конечном итоге, делает этот код )
Возвращаемся к тому что я писал:
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()

Офлайн

#5 Янв. 18, 2012 02:16:56

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

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

Если в файле нет таблицы он выдает KeyError: имятаблицы…
Если в файле перед секции нет пустой строки - опять KeyError: имятаблицы.

Дело видимо в StrangeFileWorker… Так?




p/s
Тот код что не понятен был, он вырезает /n в конце каждой строки. Вырезать два символа вроде пытался, потом еще раз проверю.
Несколько раз один и тот же файл не открывается. У меня 15 файлов.
Огромное спасибо Вам за ответы, благодаря Вам, завеса над работой с файлами немного приоткрывается. А также теперь я точно понял что такое ООП :) Всё благодаря Вам - спасибо!



Отредактировано (Янв. 18, 2012 02:49:27)

Офлайн

#6 Янв. 18, 2012 11:24:58

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

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

n2b
Если в файле нет таблицы он выдает KeyError: имятаблицы…
if 'TableName' in sfw:
print 'Table exists'
n2b
Тот код что не понятен был, он вырезает /n в конце каждой строки.
Для этого есть .strip()

n2b
Если в файле перед секции нет пустой строки - опять KeyError: имятаблицы.
Дайте пример такого файла.

Офлайн

#7 Янв. 18, 2012 11:34:12

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

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

TEST:
regexp
regexp
regexp
regexp
Перед TEST нет пустой строки.

Если файл пустой, то опять KeyError: имятаблицы


И еще вот такая ошибка…
 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)

Офлайн

#8 Янв. 18, 2012 12:17:42

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

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

# 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)

Офлайн

#9 Янв. 18, 2012 12:32:45

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

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

Да я не скопировал файл, я просто показал что нет пустой линии сверху.


В том то и суть, что файлы не в utf-8 поэтому мне и надо делать из них Utf8 при открытии.
s0rg, а у Вас есть скайп? Мне бы 5-10 минут общения с Вами и я уже все бы сразу понял…



Отредактировано (Янв. 18, 2012 12:37:37)

Офлайн

#10 Янв. 18, 2012 12:36:36

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

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

Ушло в PM

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version