Найти - Пользователи
Полная версия: Поиск по файлу и отображение
Начало » Python для новичков » Поиск по файлу и отображение
1 2 3 4
n2b
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
Данная измененная функция теперь ничего не делает вообще.
В чем проблема? Сделал все как Вы сказали…
s0rg
я не так говорил ))
выложите весь код на pastebin какой-нибудь.
n2b
http://pastebin.com/Cux2zWXW

По факту, вся моя проблема в том что у меня не получается сделать exe, из-за этого мне пришлось переделать весь проект под utf-8 (было под cp-1251).
Все файлы у меня в windows блокноте созданы и они будут изменяться. Соответственно мне необходимо во всей программе сделать utf8 также, открытие файлов в utf8, добавление текста в utf8 и т.д. Все добавления, открытия и т.д. происходят в модуле который я выложил на pastebin, т.е. все функции что там написаны мне надо привести в utf8 кодировке.
s0rg
Это ужасно, правда.
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()
n2b
Если в файле нет таблицы он выдает KeyError: имятаблицы…
Если в файле перед секции нет пустой строки - опять KeyError: имятаблицы.

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




p/s
Тот код что не понятен был, он вырезает /n в конце каждой строки. Вырезать два символа вроде пытался, потом еще раз проверю.
Несколько раз один и тот же файл не открывается. У меня 15 файлов.
Огромное спасибо Вам за ответы, благодаря Вам, завеса над работой с файлами немного приоткрывается. А также теперь я точно понял что такое ООП :) Всё благодаря Вам - спасибо!
s0rg
n2b
Если в файле нет таблицы он выдает KeyError: имятаблицы…
if 'TableName' in sfw:
print 'Table exists'
n2b
Тот код что не понятен был, он вырезает /n в конце каждой строки.
Для этого есть .strip()

n2b
Если в файле перед секции нет пустой строки - опять KeyError: имятаблицы.
Дайте пример такого файла.
n2b
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
s0rg
# 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?
n2b
Да я не скопировал файл, я просто показал что нет пустой линии сверху.


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