Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2021, 17:09   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,039
По умолчанию Поиск текста в текстовых файлах папки

здравствуйте, делаю это так:
Код:
import os
path = 'C:/Users/q8902/mysite111'
# при обычном написании удваивать бекслеши
# path = 'C:\\Users\\q8902\\mysite111', или добавить r - строка как есть, path = r'C:\Users\q8902\mysite111'
# скрипт для поиска нужного текстового фрагмента, после обнаружения первого искомого в файле далее не ищет - break
pattern = '2'
# ищет файлы в папке с учётом рекурсии - то есть и во вложенных папках
for root, dirs, files in os.walk(path):
    for file in files:
        if file.lower()[-4:] == '.txt':
            with open(os.path.join(root, file)) as in_put:
                if not pattern in in_put.read():
                    print(f'''файл: {file}\nискомый текст: {pattern}\nНЕ обнаружен в файле''')
                else:
                    for row, line in enumerate(in_put):
                        if pattern in line:
                            print(
                                f'''файл: {file}\nискомый текст: {pattern}\nобнаружен в файле\nномер строки первого обнаружения: {row + 1}''')
                            break
когда нет искомого-гут
когда есть искомое-фиаско, как подправить? спс
Ципихович Эндрю вне форума Ответить с цитированием
Старый 01.02.2021, 21:38   #2
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,039
По умолчанию

Или неужели команда брейк выходит из всех циклов?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 01.02.2021, 22:18   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
                if not pattern in in_put.read():
                    print(f'''файл: {file}\nискомый текст: {pattern}\nНЕ обнаружен в файле''')
                else:
                    in_put.seek(0)
                    for row, line in enumerate(in_put):
                        if pattern in line:
                            print(
                                f'''файл: {file}\nискомый текст: {pattern}\nобнаружен в файле\nномер строки первого обнаружения: {row + 1}''')
                            break
или
Код:
                for row, line in enumerate(in_put):
                    if pattern in line:
                        print(
                            f'''файл: {file}\nискомый текст: {pattern}\nобнаружен в файле\nномер строки первого обнаружения: {row + 1}''')
                        break
                else:
                    print(f'''файл: {file}\nискомый текст: {pattern}\nНЕ обнаружен в файле''')
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 02.02.2021, 06:54   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,039
По умолчанию

спасибо - приглянулся второй вариант, подскажите как называется, то, что else: не на одном отступе с ифом и где это можно ещё применить? спс
Ципихович Эндрю вне форума Ответить с цитированием
Старый 02.02.2021, 07:53   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Пожалуйста. Не знаю, есть ли специальное название для такого else блока. Можно добавлять его к циклам (else clauses on loops). Применять как фантазии хватит - если в результате перебора чего-либо нужно обработать вариант, когда ничего не нашлось.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 02.02.2021, 09:55   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Цитата:
подскажите как называется, то, что else: не на одном отступе с ифом
Немного добавлю.
В Python формат операторов цикла (и for и while) имеет такой вид:
Код:
<заголовок>:
    <тело>
else:
    <операторы>
Т.е., в примере, else стоит на своём месте (на уровне for) и отношения к if не имеет.
Блок else сработает только в том случае, если цикл завершится нормально.
Если цикл завершится командой break, то блок else, как относящийся к циклу, так же игнорируется.

Кстати, в Python нет цикла с постусловием, как например в Паскале
Код:
repeat
  ...
until <условие>;
или в Си
Код:
do {
 ...
} while (<условие>);
Рекомендуется использовать цикл вида:
Код:
while True:
   <тело>
   if <лог.условие>: break
Но в этом случае блок else всегда будет игнорироваться.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 02.02.2021, 10:15   #7
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,039
По умолчанию

спс, понятно
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: Поиск слова в нескольких текстовых файлах. Parnischa55 Помощь студентам 9 13.02.2013 13:52
поиск текста в файлах папки и запись результатов Composter Microsoft Office Word 12 02.04.2012 08:21
Быстрый поиск в больших текстовых файлах RIO Общие вопросы Delphi 6 29.04.2011 15:46
Поиск текста в файлах Arassir Общие вопросы по программированию, компьютерный форум 5 08.04.2011 09:22
Поиск и замена в текстовых файлах akm-gala Помощь студентам 1 18.06.2010 09:08