#python-3.x
#python-3.x
Вопрос:
В настоящее время я занимаюсь проектом, который требует от меня поиска в файле определенных команд и печати номера строки. Моя проблема возникает из-за большого количества команд, которые необходимо искать одну за другой.
bad_commands = ['Get-ComputerInfo', 'Invoke-Item']
transcript = open("transcripts/transcript.txt", "r")
for command in bad_commands:
if re.search(command, transcript):
print(command[], " has been found within the file")
else:
print("clean")
Сам файл находится Get-ComputerInfo
внутри него, поэтому он должен быть распечатан Get-ComputerInfo has been found within the file
. Вместо этого я просто получаю ошибку при запуске скрипта. Ошибка гласит
Traceback (most recent call last):
if re.search(command, transcript):
TypeError: expected string or bytes-like object
Ответ №1:
Используйте transcript.read()
, чтобы получить строку содержимого файла (с возможностью поиска).
open
Функция возвращает файловый объект, как указано в документах: Open file and return a corresponding file object. If the file cannot be opened, an OSError is raised.
, но regex.search
ожидает получить string or bytes-like object
то, что указано в ошибке.
Кстати, нет необходимости использовать re.search
just do if command in transcript.read():
, поскольку вы на самом деле не ищете строки регулярных выражений.
Комментарии:
1. это помогает. Единственная проблема заключается в том, что он может запускаться только один раз. после запуска кода мне придется перезапустить его, поскольку, похоже, он не перезапускает поиск по списку. есть предложения?
2. Правильно, назначьте строку в переменную, например,
content = transcript.read()
, и используйтеcontent
для своих тестов.