TypeError: ожидаемая строка или байтовоподобный объект для Regex в Python - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь найти в некоторых файлах регулярное выражение, мои целевые файлы выглядят так: 'Myfile_200_2018.csv'; 'Myfile_100_2018.csv' ....

Например, следующий код продолжает даватьошибка: ожидаемая строка или байтовоподобный объект для Regex в Python.

Я искал ту же ошибку в Google, но я думаю, что мой game_id является строкой, верно?Поэтому я не уверен, какая часть вызывает ошибку.

import os
import re

allfiles = os.listdir('.')

csv_files = [filename for filename in allfiles if filename.endswith('.csv')]


game_id='100'

re.search(r'(Myfile_%s_\d{4}.csv$)'%game_id, csv_files)

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вы уже просматриваете файлы в вашей папке.Почему бы не отфильтровать список при его создании?

import os
import re

allfiles = os.listdir('.')
game_id='100'

csv_files = [
                filename for filename in allfiles if filename.endswith('.csv') and 
                re.search((r"Myfile_%s_\d{4}.csv$" % game_id), filename)
            ]

print csv_files

Или, если вы также хотите сохранить исходный список, вы можете использовать фильтр для создания нового отфильтрованного списка.

csv_files = [filename for filename in allfiles if filename.endswith('.csv')]

filtered_list = filter(lambda filename: re.search((r"Myfile_%s_\d{4}.csv$" % game_id), filename), csv_files)
0 голосов
/ 29 ноября 2018

Вы можете использовать поиск по подстроке в вашем списке, если вы просто хотите найти, присутствует ли game_id в имени файла или нет

import os
import re

allfiles=['Myfile_100_2018.csv', 'Myfile_100_2017.csv','Yourfile_100_2016.csv','Myfile_200_2018.csv','Myfile_100_2018.csv']

csv_files = [filename for filename in allfiles if filename.endswith('.csv')]


game_id='100'

print([file for file in csv_files if re.search((r"Myfile_%s_\d{4}.csv$" % game_id),file)])

output:

['Myfile_100_2018.csv', 'Myfile_100_2017.csv', 'Myfile_100_2018.csv']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...