Мне нужен код на Python, который сможет искать информацию по номеру телефона в нескольких CSV-файлах и проверять, содержится ли этот номер в каких-либо из них. Как это можно реализовать?

Можно ли модифицировать данный код так, чтобы он осуществлял поиск по нескольким файлам? <br/> <br/> ```python
def get_search_terms(): 
    return input("Вводи данные пёс, и разделить не забудь ';': ").split(';') 

def find_matches_in_csv(file_name, search_terms): 
    found_entries = [] 

    with open(file_name, 'r', encoding='utf-8') as csv_file: 
        reader = csv.reader(csv_file, delimiter=';') 

        next(reader) 

        for row in reader: 
            if any(term.lower() in entry.lower() for entry in row for term in search_terms): 
                formatted_row = '; '.join([x for x in row if x]) 
                found_entries.append(formatted_row)
```
  • 6 сентября 2024 г. 17:12
Ответы на вопрос 1
Конечно! Чтобы модифицировать данный код для поиска по нескольким CSV-файлам, нам нужно будет немного изменять логику. Мы будем принимать список файлов и выполнить поиск по каждому из них.

Вот возможная версия кода, которая реализует эту функциональность:

```python
import csv

def get_search_terms():
    return input("Вводи данные, разделенные символом ';': ").split(';')

def find_matches_in_csv(files, search_terms):
    found_entries = []

    for file_name in files:
        try:
            with open(file_name, 'r', encoding='utf-8') as csv_file:
                reader = csv.reader(csv_file, delimiter=';')

                # Пропустить заголовок
                next(reader)

                for row in reader:
                    if any(term.strip().lower() in entry.lower() for entry in row for term in search_terms):
                        formatted_row = '; '.join([x for x in row if x])
                        found_entries.append((file_name, formatted_row))  # Сохраняем имя файла вместе с данными
        except FileNotFoundError:
            print(f"Файл {file_name} не найден. Пропуск.")
        except Exception as e:
            print(f"Произошла ошибка при обработке файла {file_name}: {e}")

    return found_entries

def main():
    # Вводим файлы в формате: файл1.csv;файл2.csv;файл3.csv
    files = input("Введите список файлов, разделенных ';': ").split(';')
    search_terms = get_search_terms()
    
    matches = find_matches_in_csv(files, search_terms)
    
    if matches:
        print("Найденные совпадения:")
        for file_name, entry in matches:
            print(f"Файл: {file_name}, Запись: {entry}")
    else:
        print("Совпадений не найдено.")

if __name__ == '__main__':
    main()
```

### Разъяснение изменений:
1. **Импорт модуля `csv`**: Сначала убедитесь, что вы импортировали модуль `csv`, если вы еще не сделали этого.
2. **Множественный файл в `find_matches_in_csv`**: Функция теперь принимает список файлов и итерируется по каждому файлу.
3. **Ошибка файла**: Добавлено обработка исключений на случай, если файл не найден или возникла другая ошибка при его обработке.
4. **Формирование результата**: Теперь найденные записи также содержат название файла, из которого они были извлечены, что делает вывод более информативным.
5. **Основная функция**: Ввод файлов теперь осуществляется через `input`, и строки разделяются по символу `;`, точно так же, как и для поисковых терминов.

Теперь код может искать по нескольким CSV-файлам и отображать все найденные совпадения.
Похожие вопросы