Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2019 12:50:07

Antonpython
Зарегистрирован: 2017-02-14
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

Всем привет
Есть строчка
;|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 регулярным выражением
Подскажите, пожалуйста, как это сделать
Какая маска должна быть?
Спасибо!

Офлайн

#2 Янв. 9, 2019 13:00:11

Antonpython
Зарегистрирован: 2017-02-14
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

У меня таких строчек много

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

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

Офлайн

#3 Янв. 9, 2019 13:26:06

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

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:” там вообще ни к селу ни к городу…



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 9, 2019 13:28:05)

Офлайн

#4 Янв. 9, 2019 13:38:34

Antonpython
Зарегистрирован: 2017-02-14
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

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

У меня 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()

Это мой код

Офлайн

#5 Янв. 9, 2019 13:51:56

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#6 Янв. 9, 2019 13:56:13

Antonpython
Зарегистрирован: 2017-02-14
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

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

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: здесь помогает

Отредактировано Antonpython (Янв. 9, 2019 13:57:33)

Офлайн

#7 Янв. 9, 2019 14:44:41

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#8 Янв. 9, 2019 17:04:15

Antonpython
Зарегистрирован: 2017-02-14
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

Не знаю, выкладываю то, что есть

 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

Офлайн

#9 Янв. 10, 2019 09:42:50

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

регулярное выражение для части строки

Antonpython
Не знаю, выкладываю то, что есть
а какое отношение ваша ошибка имеет к поиску подстроки в строке? оно же вам ругается на ваше
res.update(find_value(i)). Поскольку res у вас словарь его метод update() в качестве аргумента принимает пары ключ-значение(в виде другого словаря, или просто пар), а вы ему скармливаете один элемент, вот он вам и говорит что нужен второй.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 10, 2019 09:43:16)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version