Это ужасно, правда.
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()