Форум сайта python.su
Всем привет, как добавить в условие несколько значений?
Скажем, есть строковые значения 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)
Офлайн
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)
Офлайн
Нет, должно, как мне кажется, быть что-то
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()
Офлайн
конечно не правильно. Вы пытаетесь найти число в строке. Точнее даже не число, а кортеж чисел в строке. Без шансов. Не найдется.
Вам уже дали совет относительно регулярок. Если не нравится: то тогда нужно еще цикл. Перебирающий каждое значение из кортежа.
Офлайн
Если честно, сомневаюсь в решении выше
Потому что если искать #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()
Офлайн
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)
Офлайн