Как в файле txt найти строку

The reason why you always got True has already been given, so I’ll just offer another suggestion:

If your file is not too large, you can read it into a string, and just use that (easier and often faster than reading and checking line per line):

with open('example.txt') as f:
    if 'blabla' in f.read():
        print("true")

Another trick: you can alleviate the possible memory problems by using mmap.mmap() to create a “string-like” object that uses the underlying file (instead of reading the whole file in memory):

import mmap

with open('example.txt') as f:
    s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
    if s.find('blabla') != -1:
        print('true')

NOTE: in python 3, mmaps behave like bytearray objects rather than strings, so the subsequence you look for with find() has to be a bytes object rather than a string as well, eg. s.find(b'blabla'):

#!/usr/bin/env python3
import mmap

with open('example.txt', 'rb', 0) as file, 
     mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
    if s.find(b'blabla') != -1:
        print('true')

You could also use regular expressions on mmap e.g., case-insensitive search: if re.search(br'(?i)blabla', s):

You asked three related but different questions:

1. “how do i find a string or a list in a text file.”

text = input('enter: ')
data = open("sample.txt").read()
position = data.find(text)
if position != -1:
    print("Found at position", position)
else:
    print("Not found")

2. “how do I test or check if the string input by the user exist in the text file”

text = input('enter: ')
data = open("sample.txt").read()
if text in data:
    print("Found")
else:
    print("Not found")

3. “I want to make a simple spellchecker. so from the user input string i want to check if that string matches the strings/list in the txt file”

Make a dictionary like this, globally in a module:

dictionary = open("sample.txt").read().split()

Then you use the dictionary by importing it:

from themodule import dictionary

And you check if a word is in the dictionary like so:

'word' in dictionary

Поиск в текстеНедавно мы рассматривали поиск файлов через командную строку Windows. Сегодня поговорим о том, как найти внутри файлов нужный нам текст. Сделать это можно при помощи команды FIND.

Команда find сообщает имена файлов, в которых был найден искомый файл, и выводит строки, в которых он содержится.

Синтаксис команды find:

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] «искомый_текст» [путь_к_файлу]

V — вывод всех строк, НЕ содержащих искомый текст;

C — вывод только общего числа строк, содержащих искомый текст;

N — вывод номеров строк;

I — поиск без учёта регистра символов;

OFF[LINE] — не пропускать файлы с атрибутом «автономный».

Для примера проверим все текстовые файлы в каталоге C:test на наличие слова «текст».

find c:test*.txt "текст"

Если посмотреть на скриншот ниже, то можно подумать, что ни один из файлов не содержит слова «текст». Конечно, это вполне допустимый вариант. Но есть и другое объяснение.

Поиск текста в файлах через командную строку Windows

Дело в том, что по умолчанию текст в командной строке Windows отображается согласно кодовой странице CP866, а в файлах он в кодовой странице CP1251. Поэтому нам достаточно сменить кодовую страницу в текущем окне командной строки. О том, как это сделать, можно прочитать в статье по этой ссылке.

Теперь мы видим, что слово «текст» встречается во всех трёх файлах.

Поиск текста в файлах через командную строку Windows

Теперь посмотрим на строки, в которых нет слова «текст»:

find /v c:test*.txt "текст"

Такие оказались только в файле FILE_1.TXT.

Поиск текста в файлах через командную строку Windows

Помните, что команда find по умолчанию учитывает регистр. Поэтому, написав в ней «Текст», мы не найдём подобного слова в файлах. Но регистр можно и проигнорировать:

find /i c:test*.txt "Текст"

На скриншоте ниже хорошо видно, что сперва команда не нашла слова «Текст» в файлах, так как в них оно записано без заглавных букв. Добавив /i, мы это исправили.

Поиск текста в файлах через командную строку Windows

Допустим, нам нужно знать порядковые номера строк, в которых отсутствует слово «текст»:

find /v /n c:test*.txt "текст"

Поиск текста в файлах через командную строку Windows

Если мы захотим знать число строк, в которых присутствует искомое слово, тогда выполним команду:

find /c c:test*.txt "текст"

А если нам нужно знать число строк, где это слово отсутствует, тогда пример команды такой:

find /v /c c:test*.txt "текст"

Поиск текста в файлах через командную строку Windows

Хотя до этого в примерах мы искали отдельное слово, find спокойно ищет и выражения:

Поиск текста в файлах через командную строку Windows

Особенностью команды find является то, что искомый текст обязательно нужно заключать в кавычки. Это приводит к трудностям, если в пути к файлам (и в именах файлов) содержится пробел. В таком случае нужно воспользоваться перенаправлением ввода, но только если мы ищем в конкретном файле.

find "строка" < "c:test testfile_1.txt"

Как видите, наличие пробела в имени каталога C:test test не помешало осуществить поиск. Но это что касается поиска в файле file_1.txt. А вот попытка поискать сразу во всех файлах привела к ошибке.

Поиск текста в файлах через командную строку Windows

В таком случае можно воспользоваться циклическое обработкой, к примеру, командой for:

for %a in ("c:test test") do find %a*.txt "текст"

Поиск текста в файлах через командную строку Windows

Помните, что в этом случае в командной строке нужно использовать конструкции вида %a, а в файлах .bat и .cmd вида %%a.

До этого в примерах мы всегда указывали в каких файлах искать. Если этого не сделать, то команда find выполняет поиск в тексте консоли или в тексте, который был передан по конвейеру другой командой.

Для следующего примера вернём кодовую страницу CP866. После этого отсортируем вывод команды ipconfig /all — оставим только те строки, где содержится слово «Состояние»:

ipconfig /all | find "Состояние"

Поиск текста в файлах через командную строку Windows

Здесь мы лишь пробежались по вершинам, но возможности команды find гораздо больше. Особенно, если использовать её в комплексе с другими командами.

  • 01.02.2020
  • 10 628
  • 0
  • 04.08.2021
  • 8
  • 8
  • 0

FIND - описание команды и примеры использования

  • Содержание статьи
    • Описание
    • Синтаксис
    • Параметры
      • Примечания
    • Примеры
    • Справочная информация
    • Добавить комментарий

FIND – Поиск заданной строки текста в файле или нескольких файлах.

Описание

После поиска в заданных файлах команда find выведет на экран все строки из этих файлов, содержащие заданный образец.

Синтаксис

find [/v] [/c] [/n] [/i] "строка" [[диск:][путь]ИмяФайла[...]]

Параметры

Параметр Описание
/v Выводит все строки, не содержащие строку, заданную параметром строка
/c Подсчет строк, содержащих строку, указанную параметром строка, и отображение общего количества
/n Выводит номера строк перед самими строками
/i Задает поиск без различия строчных и заглавных букв
“строка_поиска” Обязательный параметр. Указывает группу символов, поиск которой будет производиться. Необходимо заключить параметр строка в кавычки (“строка”)
[диск:][путь] ИмяФайла Задает местоположение и имя файла, в котором будет производиться поиск заданной строки символов
/? Отображение справки в командной строке

Примечания

  • Если ключ /i не указан, команда find ищет именно то, что указано в параметре строка. Например, для команды find символы “a” и “A” являются различными. Если используется ключ /i, команда find не различает строчные и прописные буквы, и символы “a” и “A” являются одинаковыми.
  • Если строка поиска содержит кавычки, при вызове команды каждая кавычка в строке поиска должна быть заменена двумя символами кавычек (“СтрокаСодержания””Кавычки”).
  • Если имя файла пропущено, find действует как фильтр, получая ввод из стандартного источника вывода (обычно клавиатура, канал или файл перенаправления), и выводит все строки, содержащие параметр строка.
  • Параметры и ключи команды find могут быть заданы в произвольном порядке.
  • Подстановочные знаки (* и ?) не могут быть использованы в именах файлов и расширениях, задаваемых в команде find. Чтобы искать строку в множестве файлов, указанных с помощью подстановочных знаков, можно использовать команду find в команде for.
  • Если в одной команде заданы ключи /c и /v, команда find выведет на экран количество строк, которые не содержат заданную строку поиска. Если в одной команде указаны оба ключа: /c и /n, команда find игнорирует ключ /n.
  • Команда find не распознает символ перевода строки. Когда команда find используется для поиска текста в файле, который содержит символы перевода строки, необходимо ограничить строку поиска текстом, который может быть найден между символами перевода строки (строка не может прерываться символом перевода строки). Например, find не найдет совпадение для строки “файл налогов” если перевод строки в файле стоит между словами “файл” и “налогов”.

Примеры

Для вывода всех строк из файла Pencil.ad, которые содержат слова “Точилка” служит следующая команда:

find "Точилка" pencil.ad

Для поиска строки, содержащей текст, указанный в кавычках, необходимо сначала заключить в кавычки всю строку. Во-вторых, необходимо использовать двойные кавычки для каждых кавычек, содержащихся в строке. Для поиска фразы “Точилка” (именно с ковычками в файле Pencil.ad:

find ""Точилка"" pencil.ad

Если поиск требуется провести в нескольких файлах, следует использовать команду find с командой for. Для поиска файлов с расширением .bat, содержащих строку “PROMPT”, можно использовать следующую команду:

for %f in (*.bat) do find "PROMPT" %f

Для поиска на жестком диске C файлов, содержащих строку “CPU” и отображения их имен используйте символ канала (|), чтобы направить результаты команды dir в команду find:

dir c: /s /b | find "CPU"

Так как команда find проводит поиск, различая строчные и заглавные буквы, а команда dir выводит результаты заглавными буквами, необходимо задать строку “CPU” заглавными буквами или использовать ключ /i в команде find.

Справочная информация


  1. Home


  2. BrowserAutomationStudio


  3. Поддержка


  4. Как найти определенную строку в txt файле?

This topic has been deleted. Only users with topic management privileges can see it.


  • Доброго времени вам!
    Мучает вопрос: Как найти определенную строку в txt файле?
    Т.е у меня есть файл, там много разных строк, мне нужно найти именно ту что мне нужна и вывести её или еще что то сделать.

    Сразу скажу! Мне нужно что бы например в этой строке было какое то ключевое слово.
    Например:

    1. Привет! Меня зовут Алексей.
    2. Я учусь пользоваться программой BAS.

    И нужно найти ту строку у в которой находится слово “Меня“.
    Как это сделать?

    Спасибо заранее за помощь.


  • Уже нашел как строку извлечь. Но вот в строке есть предложение.
    Строка находится в переменной.
    И я думаю что это нужно делать через “if”.
    Например [[Привет мир!]] == ‘Привет’.
    Т.е что бы в этом предложение по мимо всяких других слов было обязательное слово “Привет“.
    Как это сделать не знаю.


  • @QmlwZ Пример, создаёте Ресурс для Указания нужного слова.
    Ну и Ресурс к Пути Файла с Списком Строк.
    Пример вот на Скрине мож Поймёте, почти тож самое 🙂
    Уменя он только на Сайте Текст берёт и ищет его в Списке, а потом нужное мне за этим словом использует.
    Суть то одна 🙂

    5e0ff660-f35d-4409-ad76-2654c87978d1-image.png image url)
    90226a92-fc6d-4a0b-bc01-8860f2512556-image.png image url)


  • @super84 спасибо за ответ!
    Но вот я немного не понял.
    У вас ищет конкретное слово именно foreach? Или все таки “Список -> Содержание?”
    Или я как понял все таки функция “Содержание” именно ищет в строке логин?

    Просто я в этом немного не понял.
    Я например сначала создаю список, туда кладу txt файл, и после этого циклов for перебираю каждую строку и хочу сравнить.
    А у вас что ли сразу же ищет в списке строку с логином?
    Вот как у меня:0fe4a74a-6f4e-4484-aed7-4af8163ccb75-image.png


  • 9da7909a-b684-47eb-8adc-4017a2861ae1-image.png image url)
    e386fff8-a13d-4982-87fa-342a0ae45098-image.png image url)
    0c124aaa-dccd-4ae7-bae5-f3705daddb6b-image.png image url)


  • Цикл Foreach и предназначен для Списков.


  • @super84 АА! Все, спасибо вам большое!



  • @super84 said in Как найти определенную строку в txt файле?:

    Цикл Foreach и предназначен для Списков.

    Скажите пожалуйста, если искать определенную строку в txt файле таким способом через Foreach то берется точное вхождение с учетом регистра букв? можно как то сделать не чувствительным к регистру и чтобы находилось не строгое вхождение но и частичное? например Труд находился бы и в строке с трудимся


  • @QmlwZ
    Пишу, как сделал бы я
    Читать файл в список. Он пропарсится по переносам строки.
    Затем Foreach
    Берём каждый элемент списка Foreach_data
    Затем используем действие Строка-Содержит
    Прогоняются все строки.
    И затем условие if строка содержит слово, тогда считываем индекс элемента списка.
    Затем выходим из Foreach с помощью той же метки.
    И затем получить элемент списка. И выводится вся строчка


  • @TRON_BOGGG said in Как найти определенную строку в txt файле?:

    @QmlwZ
    Пишу, как сделал бы я
    Читать файл в список. Он пропарсится по переносам строки.
    Затем Foreach
    Берём каждый элемент списка Foreach_data
    Затем используем действие Строка-Содержит
    Прогоняются все строки.
    И затем условие if строка содержит слово, тогда считываем индекс элемента списка.
    Затем выходим из Foreach с помощью той же метки.
    И затем получить элемент списка. И выводится вся строчка

    Прошу прощения, но регистр букв в данной схеме не учитывается ведь? Выходит еще дополнительно надо привести к единому регистру букв дополнительно, без этого никак, как мне посоветовали…


  • @mr-R
    Я бы сделал «в нижний регистр», и назвал бы эту строку вместо Foreach_data временно Foreach_data_n, искал бы в ней, а потом уже в оконцовке, когда мы вышли из цикла с помощью допустим, метки, то там уже «Получить элемент», и будет уже с регистром, что был изначально


  • 6

    0
    Votes

    6
    Posts

    1954
    Views

  • 3

    0
    Votes

    3
    Posts

    135
    Views

  • 2

    0
    Votes

    2
    Posts

    158
    Views

  • 10

    0
    Votes

    10
    Posts

    292
    Views

  • 10

    0
    Votes

    10
    Posts

    656
    Views

  • 4

    0
    Votes

    4
    Posts

    724
    Views

  • 5

    0
    Votes

    5
    Posts

    190
    Views

  • 3

    0
    Votes

    3
    Posts

    217
    Views

Добавить комментарий