Уведомления

Группа в Telegram: @pythonsu

#1 Июль 22, 2015 19:40:58

lyncs
От:
Зарегистрирован: 2010-09-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг текстового файла

Дан текстовый файл. Задача при нахождении в строке подстроки ‘_aa’ проверить все последующие строки до следующего вхождения ‘_aa’, если в этом массиве строк встречается подстрока ‘_bb’, то проверить символ, следующий за ‘_aa’, ‘_bb’. В случае несовпадения вывести номер строки и саму строку.

m1=[]
m3=[]
m4=[]
k1=0
k2=0
f = open(r'file.txt')
lines = f.readlines()
f.close()
for i, lin in enumerate(lines):
	if (lin.find('_st') is not (-1)):
		m2 = [lin[lin.find('_aa')+3],i]
		m1.append(m2)
for a in m1:
	m4 = [k2,k1+1,a[1]-1]
	m3.append(m4)
	k1 = a[1]-1
	k2 = a[0]
m3.append([k2,k1,i])
	
for b in [1,2,3,4,5]:
	for i, lin in enumerate(lines):
		if ((i<=m3[b][2]) and (i>=m3[b][1]) and (lin.find('_bb') is not (-1)):
			if (lin[lin.find('_lv')+3] != m3[b][0]):
				print 'line', i
				print lin

Код рабочий. Но написан мной, то бишь человеком не знающим питон, и большая просьба ко всем собравшимся питонерам подсказать, что можно изменить в этом быдлокодерском ужасе, чтобы он стал хоть немного более изящным.
Всем добра!



Отредактировано lyncs (Июль 22, 2015 19:49:18)

Офлайн

#2 Июль 22, 2015 21:53:48

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Парсинг текстового файла

import re
data=u"""
_aa1
_aa2
_bb2
_aa3
_bb5
""".split("\n")
def prc(d):
    a=None
    for j,i in enumerate(d):
        fnd=re.search("_aa(.)",i)
        if fnd:
            a=fnd.group(1)
        else:
            fnd=re.search("_bb(.)",i)
            if fnd:
                b=fnd.group(1)
                if b==a:
                    yield j,i
print(list(prc(data)))

тоже корявенько.



Офлайн

#3 Июль 23, 2015 06:09:35

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Парсинг текстового файла

.

Отредактировано J.R. (Фев. 27, 2016 15:51:39)

Офлайн

#4 Авг. 3, 2015 05:19:48

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Парсинг текстового файла

Както так…

with open(r'file.txt') as f:
    lines = f.readlines()
for i, lin in enumerate(lines):
    if '_aa' in lin:
        num_aa = lin[lin.find('_aa')+3]
    if '_bb' in lin:
        num_bb = lin[lin.find('_bb')+3]
        if num_aa != num_bb:
             print i, lin

Отредактировано Iskatel (Авг. 3, 2015 05:34:42)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version