Python re.match整个文件应为类似字节的对象错误

Python re.match整个文件应为类似字节的对象错误,python,regex,Python,Regex,我已经看了和,但这两个问题的解决方案对我来说并不奏效 因此,本文的目标是在文本文件中对模式进行正则表达式搜索,特别是从示例文本文件 参数值= Texture2D'/Game/Characters/slasher/Bear/Textures/ought01/T_-behahead01_-BC.T_-behahead01_-BC' 参数值=Texture2D'/Game/Characters/slasher/Bear/Textures/ought01/T_behahead01_BC.T_behahe

我已经看了和,但这两个问题的解决方案对我来说并不奏效

因此,本文的目标是在文本文件中对模式进行正则表达式搜索,特别是从示例文本文件

参数值= Texture2D'/Game/Characters/slasher/Bear/Textures/ought01/T_-behahead01_-BC.T_-behahead01_-BC' 参数值=Texture2D'/Game/Characters/slasher/Bear/Textures/ought01/T_behahead01_BC.T_behahead01_BC'

我想提取“/Game/Characters/Slashers/Bear/Textures/ought01/T_behahead01_BC”和“/Game/Characters/Slashers/Bear/Textures/ought01/T_behahead01_BC”,我知道这是字符串正则表达式模式:

Texture2D\'(.*)\。
和捕获组的一部分。组(1)

相关代码部分为:

打开(mytool.propstxt_路径'r+')作为f:
data=mmap.mmap(f.fileno(),0)
match\u obj=re.match('Texture2D\'(.*)\'',数据)
打印(匹配对象组(1))
我使用mmap将整个文本文件读取到内存中,这样数据就像一个普通字符串一样,可以进行正则表达式匹配

但是,我遇到了一个问题:无法在这一行的类似字节的对象上使用类似字符串的模式:match_obj=re.match('Texture2D'(.*)',data)

因此,我尝试使用regex和compile将字符串模式转换为类似字节的模式。但不幸的是,这导致match_obj为nothing,因为打印它时返回None,所以我认为下面的代码段不正确

打开(mytool.propstxt_路径'r+')作为f:
data=mmap.mmap(f.fileno(),0)
regex=rb'Texture2D\'(.*)''
pattern=re.compile(regex)
match_obj=re.match(模式、数据)#'Texture2D\'(.*)'
打印(匹配对象)
我还尝试在模式之前放置一个b以将其转换为字节,但这再次导致match_obj为None,没有属性。group()

打开(mytool.propstxt_路径'r+')作为f:
data=mmap.mmap(f.fileno(),0)
match\u obj=re.match(b'Texture2D\'(.*)\'',数据)
打印(匹配对象组(1))
我尝试的最后一件事是使用.decode()将数据解码到UTF-8。执行以下操作,但返回错误mmap.mmap对象没有属性decode

打开(mytool.propstxt_路径'r+')作为f:
data=mmap.mmap(f.fileno(),0)。解码('UTF-8')
match\u obj=re.match('Texture2D\'(.*)\'',数据)
打印(匹配对象组(1))
我想尝试的最后一件事就是逐行读取整个文件,因为mmaps意味着您需要使用像regex这样的字节,我不知道在我的情况下该怎么做

我的全部代码如下所示,但警告是针对blender插件、创建面板等

#导入所有库,包括正则表达式匹配和将字符串映射到内存所需的库
进口bpy、re、mmap
类PathProps(bpy.types.PropertyGroup):
propstxt\u路径:bpy.props.StringProperty(name=“选择propstxt文件”,description=“选择文件”,subtype=“文件路径”)
texloc_路径:bpy.props.StringProperty(name=“选择导出的游戏文件夹”,description=“选择文件夹”,subtype=“DIR_路径”)
类DBDShaderScript_PT_main_面板(bpy.types.panel):
bl_label=“DBD着色器贴图”
bl_idname=“DBDShaderScript\u PT\u主面板”
bl_空间_类型='VIEW_3D'
bl_区域_类型='UI'
bl_category=“DBD着色器”
def绘图(自身、上下文):
布局=自布局
scene=context.scene
mytool=scene.my_工具
布局.prop(mytool,“propstxt\u路径”)
布局.道具(mytool,“texloc_路径”)
layout.operator(“dbdshaderscript.addbasic_operator”)
DBDShaderScript_OT_add_basic类(bpy.types.Operator):
bl_label=“添加基本着色器贴图(除头发外的所有材质)”
bl_idname=“dbdshaderscript.addbasic_运算符”
def执行(自身、上下文):
#参考用户输入的文件名
scene=context.scene
mytool=scene.my_工具
#找到所选材料,s_mat代表所选材料
s_mat=bpy.context.active_object.active_material
s_mat.use_nodes=True
#将新的链接函数存储到变量
link=s_mat.node_tree.links.new
#将原则性BSDF分配给变量,以便以后可以引用
#这样节点就可以链接到它
principled_node=s_mat.node_tree.nodes.get('principled BSDF')
#开始将所有节点和各自的链接添加到着色器贴图
srgb_node=s_mat.node_tree.nodes.new(“ShaderNodeSeparateRGB”)
srgb_node.location=-200150#x,y
链接(srgb_节点输出[2],原则_节点输入[4])
node=s_mat.node_tree.nodes.new(“ShaderNodeValToRGB”)
node.location=-500,50#x,y
链接(节点输出[0],原则节点输入[7])
#node=s_mat.node_tree.nodes.new(“ShaderNodeSeparateRGB”)
#node.location=-200100#x,y
#链接(节点输出[2],原则节点输入[4])
将open(mytool.propstxt_路径'r+')作为f:
data=mmap.mmap(f.fileno(),0)
match\u obj=re.match('Texture2D\'(.*)\'',数据)
打印(匹配对象组(1))
#添加图像纹理节点
texImage=s_mat.node_tree.nodes.new('ShaderNodeTexImage'))
#加载图像的示例
#texImage.image=bpy.data.images.load(“C:\\Users\\myName\\Downloads\\Textures\\Downloaded\\Floorring5.jpg”)
#取消对此的注释
#texImage.image=bpy.data.images.load(匹配对象组(1)[0])
#建立到原则BSDF节点的链接
链接(texImage.outputs[0],principled_node.inputs[0])
返回{“完成”}
#注册+取消注册循环中的所有类
classes=[PathProps,DBDShaderS