Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 16, 2019 14:44:03

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

Печать строки, если в ней есть одно из нескольких значений

Всем привет, как добавить в условие несколько значений?

Скажем, есть строковые значения 1043027, 1043029, 1043030, 1043031 и чтобы если хотя бы одно из них есть в строке - строка печаталась

 import os
import sys
def find_value(fname):
    value = 0
    with open(fname, encoding='cp866') as fn:
        cn = 0
        try:
            for i in fn:
                if '1043027' in i:
                    cn = cn + 1
                    m = str(i)
                    print(str(cn) + ' ' + fname + " Строка: " + m)
        except IndexError:
            pass
    return {0:fname}
def main():
    dirname = ('H:\\fmdt')
    os.chdir(dirname)
    res = {}
    for i in os.listdir(dirname):
        res.update(find_value(i))
if __name__ == "__main__":
    main()

Отредактировано Antonpython (Янв. 16, 2019 14:45:58)

Офлайн

#2 Янв. 16, 2019 14:52:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Печать строки, если в ней есть одно из нескольких значений

 if i in ('abc', 'def', 'ghi'):
 if re.search(r'abc|def|ghi', i):
 if re.search('|'.join(('abc', 'def', 'ghi')), i):



Отредактировано py.user.next (Янв. 16, 2019 14:55:37)

Офлайн

#3 Янв. 16, 2019 15:08:34

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:
        cn = 0
        try:
            for i in fn:
                if (1043027, 1043029, 1043030, 1043031) in i: # но здесь неправильно... Или я не прав?
                    cn = cn + 1
                    m = str(i)
                    print(str(cn) + ' ' + fname + " Строка: " + m)
        except IndexError:
            pass
    return {0:fname}
def main():
    dirname = ('H:\\fmdt')
    os.chdir(dirname)
    res = {}
    for i in os.listdir(dirname):
        res.update(find_value(i))
if __name__ == "__main__":
    main()

Офлайн

#4 Янв. 16, 2019 15:34:49

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Печать строки, если в ней есть одно из нескольких значений

конечно не правильно. Вы пытаетесь найти число в строке. Точнее даже не число, а кортеж чисел в строке. Без шансов. Не найдется.
Вам уже дали совет относительно регулярок. Если не нравится: то тогда нужно еще цикл. Перебирающий каждое значение из кортежа.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Янв. 16, 2019 17:38:43

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

Печать строки, если в ней есть одно из нескольких значений

Если честно, сомневаюсь в решении выше
Потому что если искать #if ‘FNam=’ in i: - выдаст одно количество строк
Если искать по if re.search(r'FNam|T->comsrv:', i): выдаст другое количество строк с FNam

Как-то так…

 import os
import sys
import re
def find_value(fname):
    value = 0
    with open(fname, encoding='cp866') as fn:
        cn = 0
        try:
            for i in fn:
                #if 'FzgNam=' in i:
                if re.search(r'FNam|T->comsrv:', i):
                    cn = cn + 1
                    m = str(i)
                    print(str(cn) + ' ' + fname + " Строка: " + m)
        except IndexError:
            pass
    return {0:fname}
def main():
    dirname = ('C:\\Users\\Anton\\Desktop\\Test')
    os.chdir(dirname)
    res = {}
    for i in os.listdir(dirname):
        res.update(find_value(i))
if __name__ == "__main__":
    main()

Офлайн

#6 Янв. 17, 2019 02:11:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Печать строки, если в ней есть одно из нескольких значений

Antonpython
Скажем, есть строковые значения 1043027, 1043029, 1043030, 1043031 и чтобы если хотя бы одно из них есть в строке - строка печаталась

Antonpython
Если честно, сомневаюсь в решении выше
Потому что если искать #if ‘FNam=’ in i: - выдаст одно количество строк
Если искать по if re.search(r'FNam|T->comsrv:', i): выдаст другое количество строк с FNam

Скорее всего, ты неправильно алгоритм составил. Надо различать “содержатся они все там” и “содержится какое-то из них”.

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

Вот ты пишешь, например,
Antonpython
 dirname = ('C:\\Users\\Anton\\Desktop\\Test')
И хочется спросить тебя: а зачем ты здесь вокруг строки поставил круглые скобки? Они тут вообще не нужны, потому что никакой роли не играют. Вот и складывается впечатление, что ты вообще ничего не читал, потому что в книжке ты такого кода не увидишь.



Отредактировано py.user.next (Янв. 17, 2019 02:12:35)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version