Найти - Пользователи
Полная версия: регулярное выражение для части строки
Начало » Python для новичков » регулярное выражение для части строки
1
Antonpython
Всем привет
Есть строчка
;|Input=1;180;3;234;21;4;N;;-1;1;;;|LArtBez=10;55;3;63;20;17;N;Artikel;-1;1;;;|LTeNam=10;80;3;63;20;9;N; Te;-1;1;;;|LTeNamTrg=10;130;3;63;20;13;N;Trдger;-1;1;;;|LTeNamUbo=10;105;3;63;20;11;N; Ubo;-1;1;;;|LTePosNr=10;80;183;9;20;15;N;;-1;1;;;|LTePosNrUbo=10;105;183;9;20;19;N;;-1;1;;;|LZiel=10;205;3;54;20;7;N; Ziel:;-1;1;;;|Label=10;155;3;234;20;3;N;TE-Eingabe:;-1;1;;;|MDT=10|MaskCmd=MaskDef|MaskFocusMaskName=MdtInputTe|MdtMbx=TskMdt1|SubTitle=10;20;0;240;20;6;N;;-4926931;1;;;|TeNam=10;80;75;108;20;10;N;;-1;1;;;|TeNamTrg=10;130;75;162;20;14;N;;-1;1;;;|TeNamUbo=10;105;75;108;20;12;N;;-1;1;;;|TePosNr=10;80;192;45;20;16;N;;-1;1;;;|TePosNrUbo=10;105;192;45;20;20;N;;-1;1;;;|Title=10;0;0;240;20;2;N;TE Bestдtigen;-4926931;1;;;|Ziel=10;205;66;171;20;8;N;;-1;1;;;|

Хочу найти TeNam=10 регулярным выражением
Подскажите, пожалуйста, как это сделать
Какая маска должна быть?
Спасибо!
Antonpython
У меня таких строчек много

Вот код, который я стараюсь адаптировать

i
 mport os
import sys
import re
def find_max_value(fname):
    value = 0
    with open(fname, encoding='cp866') as fn:
        try:
            for i in fn:
                if v ='TeNam=10':
                     print(value, fname)
        except IndexError:
            pass
    return {value: fname}
def main():
    dirname = ('G:\1\MdtProt')
    os.chdir(dirname)
    res = {}
    for i in os.listdir(dirname):
        res.update(find_max_value(i))
    print('Filename is: ', res.get(max(res)))
if __name__ == "__main__":
    main()
PEHDOM
Antonpython
Вот код, который я стараюсь адаптировать
он вообще не должен работать потому что :
 if v ='TeNam=10':
это операция связывания(присваивания), а не сравнения.

Antonpython
Хочу найти TeNam=10 регулярным выражением
не пому зачем вам регулярка? если нужно только проверить наличие в строке ‘TeNam=10’ то делаете просто
 if 'TeNam=10' in string:
оно вам вернет True, если в строке содержится ‘TeNam=10’
соотвевенно ваш код должен выглядеть както так:
     
...
with open(fname, encoding='cp866') as fn:
        for st in fn:
            if 'TeNam=10' in st:
                 print(value, fname)
....

“ try:… except IndexError:” там вообще ни к селу ни к городу…

Antonpython
не знаю, кидает ошибки

У меня 5 файлов в одном из них TeNam

 import os
import sys
def find_max_value(fname):
    value = 0
    with open(fname, encoding='cp866') as fn:
        try:
            for i in fn:
                if 'TeNam' in i:
                    print(fname)
        except IndexError:
            pass
    return {fname}
def main():
    dirname = ('G:\1\MdtProt')
    # os.chdir(dirname)
    # res = {}
    # for i in os.listdir(dirname):
    #     res.update(find_max_value(i))
    # print('Filename is: ')
if __name__ == "__main__":
    main()

Это мой код
PEHDOM
Antonpython
не знаю, кидает ошибки
какие именно?
Antonpython
Каюсь, это были ошибки в прошлой версии
Этот код вовсе ничего не выводит

C:\Users\lavraschuk\PycharmProjects\FindName\venv\Scripts\python.exe CUsers/lavraschuk/PycharmProjects/FindName/venv/Scripts/FindName.py

Process finished with exit code 0

Не уверен, что if ‘TeNam’ in i: здесь помогает
PEHDOM
Antonpython
Не уверен, что if ‘TeNam’ in i: здесь помогает
уверен что помогает, только вот у вас кусок закоментирован
     # os.chdir(dirname)
    # res = {}
    # for i in os.listdir(dirname):
    #     res.update(find_max_value(i))
    # print('Filename is: ')
без него оно файлы не перебирает
Antonpython
Не знаю, выкладываю то, что есть

 import os
import sys
def find_value(fname):
    value = 0
    with open(fname, encoding='cp866') as fn:
        try:
            for i in fn:
                if 'TeNam' in i:
                    print(fname)
        except IndexError:
            pass
    return {fname}
def main():
    dirname = ('H:\\1\\3')
    os.chdir(dirname)
    res = {}
    for i in os.listdir(dirname):
        res.update(find_value(i))
    print('Filename is: ')
if __name__ == "__main__":
    main()


Пишется ошибка

C:\Users\Anton\AppData\Local\Programs\Python\Python36-32\python.exe “CUsers/Anton/PycharmProjects/Работа с файловой системой/Перебор файлов из папки.py”
Traceback (most recent call last):
File “CUsers/Anton/PycharmProjects/Работа с файловой системой/Перебор файлов из папки.py”, line 21, in <module>
main()
File “CUsers/Anton/PycharmProjects/Работа с файловой системой/Перебор файлов из папки.py”, line 18, in main
res.update(find_value(i))
ValueError: dictionary update sequence element #0 has length 35; 2 is required

Process finished with exit code 1
PEHDOM
Antonpython
Не знаю, выкладываю то, что есть
а какое отношение ваша ошибка имеет к поиску подстроки в строке? оно же вам ругается на ваше
res.update(find_value(i)). Поскольку res у вас словарь его метод update() в качестве аргумента принимает пары ключ-значение(в виде другого словаря, или просто пар), а вы ему скармливаете один элемент, вот он вам и говорит что нужен второй.
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