Найти - Пользователи
Полная версия: Печать строки, если в ней есть одно из нескольких значений
Начало » Python для новичков » Печать строки, если в ней есть одно из нескольких значений
1
Antonpython
Всем привет, как добавить в условие несколько значений?

Скажем, есть строковые значения 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()
py.user.next
 if i in ('abc', 'def', 'ghi'):
 if re.search(r'abc|def|ghi', i):
 if re.search('|'.join(('abc', 'def', 'ghi')), i):
Antonpython
Нет, должно, как мне кажется, быть что-то

 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()
JOHN_16
конечно не правильно. Вы пытаетесь найти число в строке. Точнее даже не число, а кортеж чисел в строке. Без шансов. Не найдется.
Вам уже дали совет относительно регулярок. Если не нравится: то тогда нужно еще цикл. Перебирающий каждое значение из кортежа.
Antonpython
Если честно, сомневаюсь в решении выше
Потому что если искать #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()
py.user.next
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')
И хочется спросить тебя: а зачем ты здесь вокруг строки поставил круглые скобки? Они тут вообще не нужны, потому что никакой роли не играют. Вот и складывается впечатление, что ты вообще ничего не читал, потому что в книжке ты такого кода не увидишь.
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