Каталог файлов (Windows 10), в котором раньше хранилось множество сценариев «*.py».

Я хочу просмотреть сценарии .py, чтобы выяснить, какой из них содержит определенное ключевое слово.

Что было бы лучше, чем ниже, потому что часто возникает ошибка:

UnicodeDecodeError: 'utf-8' codec can't decode bytes in position xxxx: invalid continuation byte

(Я также пытался использовать кодировку «latin-1» или читать сценарии в формате «rb»)

Спасибо.

import os, re

# Define the directory to search in and the keyword to look for
directory = '/path_to_directory'
keyword = 'the_keyword'

# Regular expression pattern to match the keyword
pattern = re.compile(r'\b{}\b'.format(re.escape(keyword)))

# Function to search for the keyword in a file
def search_in_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        for line_number, line in enumerate(file, start=1):
            if pattern.search(line):
                print(f'Found keyword "{keyword}" in {file_path} at line {line_number}:')
                print(line.strip())

# Loop through the directory and its subdirectories
for root, dirs, files in os.walk(directory):
    for file in files:
        if file.endswith('.py'):
            file_path = os.path.join(root, file)
            search_in_file(file_path)

2
Mark K 30 Окт 2023 в 09:08
Ты на линуксе или маке? для этого вы можете легко использовать ack или grep. или модуль Python ast также может работать, если вы знаете, что ключевое слово соответствует определенному объекту. также убедитесь, что вы используете кодировку, правильную для вашей среды . включите пример сценария, который выдает ошибку для более конкретного ответа
 – 
willwrighteng
30 Окт 2023 в 09:17
@willwrighteng, спасибо за комментарий. извини забыл упомянуть, это в винде.
 – 
Mark K
30 Окт 2023 в 09:23
Поскольку вы рассматриваете сценарии Python как текстовые файлы, вам придется использовать правильная кодировка для систем Windows. Кроме того, bash теперь доступен в Windows
 – 
willwrighteng
30 Окт 2023 в 09:25
2
Если вы на самом деле ищете ключевое слово, вам нужно проанализировать файл и пройтись по дереву AST. В противном случае вы получите результаты также из комментариев и строк.
 – 
jurez
30 Окт 2023 в 09:29
Я согласен с @jurez. навигация по сценариям Python с помощью модуля ast — это метод, независимый от платформы.
 – 
willwrighteng
30 Окт 2023 в 09:30

1 ответ

  • Вы можете обработать исключение с помощью try/Exception.

Образец кода:

# Function to search for the keyword in a file
def search_in_file(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            # rest of the code 
    except UnicodeDecodeError:
        print(f'Error decoding file: {file_path}')
  • Вы получаете эту ошибку, возможно, потому, что некоторые файлы Python содержат символы в кодировке, отличной от UTF-8.
1
yusuf 30 Окт 2023 в 09:21
Спасибо. В случае, если ключевое слово существует в сценарии с ошибкой UnicodeDecodeError, будет ли игнорироваться результат поиска?
 – 
Mark K
30 Окт 2023 в 09:38
Если произойдет ошибка, она напечатает ее и перейдет к следующей части вашего кода.
 – 
yusuf
30 Окт 2023 в 10:06