Szukanie miasta w dużych plikach tekstowych

0

Cześć.
Mam ok 200 plików tekstowych max 4KB. Chciałbym znaleźć wśród nich te które zawierają w treści nazwę polskiego miasta.
W jaki sposób podeszlibyście do do rozwiązania takiego problemu? Wolałbym nie wysyłać tego do chmury

0

Alt+F7 w total commander i szukasz tekst w plikach

0

Ja bym użył notepad++ i szukanie w plikach

4

Skoro pliki 4kB to dla Ciebie duże pliki tekstowe, to Ty dużych plików tekstowych nie widziałeś :]

Jeśli chcesz napisać własny programik do tego, to ja bym wybrał Pythona.
Chat GPT dał taki kod:

import os

def find_string_in_files(folder_path, search_string):
    """
    Szuka zadanego łańcucha znaków we wszystkich plikach tekstowych w danym folderze.

    :param folder_path: Ścieżka do folderu, który ma być przeszukany.
    :param search_string: Szukany łańcuch znaków.
    """
    for root, dirs, files in os.walk(folder_path):
        for file_name in files:
            if file_name.lower().endswith(".txt"):
                file_path = os.path.join(root, file_name)
                try:
                    with open(file_path, "r", encoding="utf-8") as file:
                        content = file.read()
                        if search_string.lower() in content.lower():
                            print(f"Znaleziono w pliku {file_path}:")
                            print(content)
                            print("-" * 50)
                except Exception as e:
                    print(f"Błąd odczytu pliku {file_path}: {e}")

# Przykład użycia:
folder_to_search = "/ścieżka/do/twojego/folderu"
search_term = "Python"
find_string_in_files(folder_to_search, search_term)
3

Pojedyncze szukanie, czy wielokrotne?

Jeśli pojedyncze, to ripgrepripgrep --fixed-strings $(nazwa miasta) /ścieżka/do/plików/. Jako, że trochę bardziej skomplikowane wyszukanie ([A-Z]+_SUSPEND) na dużo większej próbce (kod źródłowy Linuksa) zajmuje mu, zgodnie z README, ułamek sekundy, to i tutaj się nie naczekasz zauważalną ilość czasu.

No chyba, że będziesz tego szukał w kółko. Wówczas bym zkonkatenował słowa ze wszystkich tych plików rozdzielając jakimś poza-alfabetycznym znakiem (np. |), skonstruował z nich drzewo sufiksowe¹ i szukał w nim. Tak na moją przed-poranno-kawową głowę, szybciej od tego chyba się nie da, ale na wszelki wypadek i tak trzeba zastosować Pierwszą Zasadę Optymalizacji — „benchmark, benchmark, benchmark”.


¹ Szybka metoda konstrukcji drzewa sufiksowego — nie, żeby tutaj miało to większe znaczenie, plików jest w sumie mało i jest to jednorazowa robota…

1

Lista miast, (wikipedia): https://pl.wikipedia.org/wiki/Miasta_w_Polsce teraz odpowiednie zapytania do chata GPT, żeby to zescrapować i przeszukać twoją listę.

0

Tu wychodzi kto jakich narzędzi używa, można grepem, ja mam akurat neovim to robię ,fg wpisuję jakąś część nazwy szukanej i mi znajduje wszystkie pliki gdzie to występuje, a jak zrobię ,ff to mi znajduje wszystkie pliki grepując po takiej nazwie, czyli jak po części się znajduje taka nazwa w nazwie pliku.

0

Jak jednorazowo to bym wkleił dokument do chatgpt i poprosił o ogarnięcie tego.

0

Tu widzę same najnowsze technologie, sztuczna inteligencja, szmery bajery 😉

A tak to robiliśmy w latach 90-tych:

curl -L https://pl.wikipedia.org/wiki/Dane_statystyczne_o_miastach_w_Polsce | xmllint --html --xpath '//td[1]/descendant-or-self::*/a/text()' - 1> lista_miast.txt 2> /dev/null

grep -F -n -f lista_miast.txt -r folder_z_plikami_do_przeszukania

1 użytkowników online, w tym zalogowanych: 0, gości: 1