Найти - Пользователи
Полная версия: Парсинг текстового файла
Начало » Python для новичков » Парсинг текстового файла
1
lyncs
Дан текстовый файл. Задача при нахождении в строке подстроки ‘_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

Код рабочий. Но написан мной, то бишь человеком не знающим питон, и большая просьба ко всем собравшимся питонерам подсказать, что можно изменить в этом быдлокодерском ужасе, чтобы он стал хоть немного более изящным.
Всем добра!
doza_and
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)))

тоже корявенько.
J.R.
.
Iskatel
Както так…

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