Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 25, 2011 18:34:52

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

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

И еще вопросик, на эту же тему.
Теперь надо чтобы она записывала строку в файл, начиная с новой строки, т.е.:
файл вида

NameTable0:
0
1
2
3
4
N

NameTable1:
0
1
2
3
4
N

.
.
.

NameTableN:
N

То есть мне надо записать, к примеру, в NameTable0 после N(это последняя строка), также надо после добавленной строки еще и поставить Ентер(т.е. пустую строку), чтобы получилось так:

NameTable0:
0
1
2
3
4
N
N1 (добавленная строка)

NameTable1:
….



Отредактировано (Ноя. 25, 2011 22:36:44)

Офлайн

#2 Ноя. 26, 2011 11:37:31

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

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

Порядок расположения важен?

Офлайн

#3 Ноя. 26, 2011 18:30:59

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

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

s0rg
Порядок расположения важен?
Нет. Но названий таблиц и regexpov может быть много.



Офлайн

#4 Ноя. 26, 2011 19:54:51

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

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

class StrangeFileWorker(object):
def __init__(self):
self._sections = 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 = None
lines = data.split('\n')
for ln in lines:
if not ln:
continue
if ln.endswith(':'):
cur_key = ln.strip(':')
self._sections[cur_key] = list()
elif cur_key is not None:
self._sections[cur_key].append(ln)

def __getitem__(self, key):
return self._sections[key]

def __delitem__(self, key):
del self._sections[key]

def __repr__(self):
return '\n'.join(['%s:\n%s\n' % (k, '\n'.join(v)) for k,v in self._sections.iteritems()])

if __name__ == '__main__':
sfw = StrangeFileWorker()

print 'Loading file...'
sfw.load_file('test_input')
print 'Got:'
print sfw
print 'NameTable1 contains:'
print sfw['NameTable1']
print 'Adding value RegExpN2 to NameTable1'
sfw['NameTable1'].append('RegExpN2')
print 'Got:'
print sfw
print 'Writing result to file'
with open('test_output', 'w') as fd:
fd.write(repr(sfw))

Офлайн

#5 Ноя. 26, 2011 20:07:52

DXSh
От:
Зарегистрирован: 2011-11-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Доброго Всем времени суток!
Стоит задача на работе выписывать данные из тестового файла файл si_01112011.txt
Нужно в этом файле искать параметр Lmax = 3.6 и др. подобные параметры и формировать XML
Хочу автоматизировать этот процес на Питоне…
Буду благодарен кто напишет алгоритм обработки на словах и посоветует какие модули использовать и какую доку почитать для решения этой задачи…



Офлайн

#6 Ноя. 26, 2011 23:11:11

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

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

s0rg!!!
Большущие спасибо, но если ты из Москвы, то “спасибо” могу выразить в бочковом/литровом эквиваленте любой вино-водочной продукцией!

Работоспособность в своей системе еще не проверял, но если что, я надеюсь могу рассчитывать на ответы здесь.



Офлайн

#7 Ноя. 28, 2011 00:05:21

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

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

s0rg, мне уже даже не прилично писать что-либо, но я совсем не дружу с файлами и не работал никогда со строками.

Я говорю, таблица такая-то, он мне выводит нужные мне строки(то что ты помог мне сделать), теперь мне нужно взять и удалить 1 строчку, со сдвигом вверх, чтобы не было пробелов между regexps.

NameTable0:
re1
re2
re3
re4

удаляем re3

NameTable0:
re1
re2
re4

И да, двух ОДИНАКОВЫХ re3 во ВСЕМ файле НЕ может быть. То есть достаточно открыть файл и удалить просто одну линию из него.



Отредактировано (Ноя. 28, 2011 00:09:15)

Офлайн

#8 Ноя. 28, 2011 00:18:07

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

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

вопрос снят. нашел кучу решений в гугле. спасибо, извините.


тааак-с, есть трабл.
Вот код на replace строки.

def replaceAll(file,searchExp,replaceExp):
for line in fileinput.input(file, inplace=1):
if searchExp in line:
line = line.replace(searchExp,replaceExp)
sys.stdout.write(line)
Но есть косяк. Я делаю следующую замену:
replaceAll(file, “ ”, str)
И он вместо str пихает пробел, но оставляет пустую строчку, как мне убрать пустую строчку?

Щас проверил, не совсем то что мне нужно…. Пока не нашел способа лучше тупо удалить строчку из файла и убрать пустую(оставшуюся).

Щас еще раз проверил всё. Мне совсем это не походит, оно открывает файл и удаляет ВЕЗДЕ (по всему файлу) str… а не только 1 строчку…

А еще было бы круто найти определенную строчку и ТОЛЬКО ЕЁ заменить на другую строчку.



Отредактировано (Ноя. 28, 2011 00:57:56)

Офлайн

#9 Ноя. 28, 2011 09:51:37

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

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

А внимательно и вдумчиво прочитать код?

sfw['NameTable0'].remove('re3')
upd:

Сразу добалю, можно удалить и всю секцию сразу:
del sfw['NameTable0']

Отредактировано (Ноя. 28, 2011 09:57:44)

Офлайн

#10 Ноя. 28, 2011 11:09:14

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

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

А всю секцию сразу удалить это какой код?
sfw.remove('string') мне понятно, а в каком контексте писать del sfw?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version