TypeError:Python中正则表达式应为字符串或类似字节的对象

TypeError:Python中正则表达式应为字符串或类似字节的对象,python,arrays,regex,Python,Arrays,Regex,我试图通过正则表达式搜索一些文件,我的目标文件看起来像:“Myfile_200_2018.csv”;”Myfile_100_2018.csv' 例如,以下代码给出了错误:Python中Regex的预期字符串或类似字节的对象 我在谷歌搜索了同样的错误,但我认为我的游戏id是一个字符串,对吗?所以我不确定是哪一部分导致了错误 import os import re allfiles = os.listdir('.') csv_files = [filename for filename in a

我试图通过正则表达式搜索一些文件,我的目标文件看起来像:“Myfile_200_2018.csv”;”Myfile_100_2018.csv'

例如,以下代码给出了错误:Python中Regex的预期字符串或类似字节的对象

我在谷歌搜索了同样的错误,但我认为我的游戏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)

如果您只想搜索文件名中是否存在游戏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)])
输出:

['Myfile_100_2018.csv', 'Myfile_100_2017.csv', 'Myfile_100_2018.csv']

您已经在循环浏览文件夹中的文件。为什么不在创建列表时过滤它呢

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
或者,如果您还想保留原始列表,可以使用filter创建新的筛选列表

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)

csv\u文件
需要是一个字符串,而不是字符串列表。但是在这个文件夹中有几个csv文件,csv\u文件包含csv文件列表,当游戏id='100“,只想返回所有符合格式的csv文件,它包含:'Myfile_100_2018.csv'、'Myfile_100_2017.csv'、'Myfile_100_2016.csv'这不是工作方式。使用不同的方法;你不能查找一个函数,插入任何你认为有效的参数,并期望它这样做。你已经在文件列表中循环了。为什么不在创建列表时在那里过滤呢?像
csv\u files=[filename for filename in allfiles if filename.endswith('.csv')和re.search((r“Myfile\u%s\ud{4}.csv$%game\u id),filename)]
但是我想返回一个与正则表达式匹配的列表,因为在这个文件夹中有几个csv文件,csv\u文件包含csv文件列表,当游戏id='100“,只想返回与格式匹配的所有csv文件,它包含:'Myfile_100_2018.csv'、'Myfile_100_2017.csv'、'Myfile_100_2016.csv'我已更改代码以返回文件而不是布尔值我怀疑OP希望列表中的零,因此使用
[如果文件中有游戏id,请使用csv文件中的文件]
相反。如果有一个名为“Yourfile\u 100\u 2018.csv”的文件,它仍然会返回,那么除了游戏id之外,您选择文件的条件是什么