【发布时间】:2020-07-11 02:32:14
【问题描述】:
问题: 我有一个包含 7000 多个文件的目录(有时更多,有时更少。) 这些文件都没有文件扩展名。 每个文件都有一个未知的编码(很可能是二进制文件),但如果我向文件添加扩展名,我似乎可以用基本代码读取一个文件。由于它不是 ANSI 或 UTF-8 编码的,因此 Replace 和 Strip 函数不适用于空格。此模块现在适用于单个文件。(感谢 AKX)
代码:
# OPEN FILES
import re
f = open('berlin_floors_metal_catwalk1.txt','r')
filecontent = f.read()
# ---SPECULAR---
# FIND SPECULAR NAME
identifiers = re.findall("([~_a-z0-9]{3,})", filecontent, flags=re.I)
specfname = identifiers[identifiers.index('envMapParms') - 1]
specular = specfname + '.png'
#---- THE FINAL VARIABLE
print(specular)
# --------------
# ---NORMAL---
# FIND NORMAL NAME
identifiers = re.findall("([~_a-z0-9]{3,})", filecontent, flags=re.I)
normalfname = identifiers[identifiers.index('specularMap') - 1]
normal = normalfname + '.png'
#---- THE FINAL VARIABLE
print(normal)
# --------------
# ---DIFFUSE COLORMAP---
# FIND COLORMAP NAME
identifiers = re.findall("([~_a-z0-9]{3,})", filecontent, flags=re.I)
colorfname = identifiers[identifiers.index('colorMap') - 1]
colormap = colorfname + '.png'
#---- THE FINAL VARIABLE
print(colormap)
# --------------
f.close()
输入:
² Ï
@ Ð p
@ d î Ï ÷ , S ÍÌL?ÍÌL@ ˆÀ ?_ €? €? €? €?i €? €?l_sm_t0c0n0s0_sco berlin_floors_metal_catwalk1 berlin_floors_metal_catwalk1_c colorMap normalMap berlin_floors_metal_catwalk1_n specularMap ~berlin_floors_metal_catwalk1~f0baafa8 envMapParms colorTint dynamicFoliageSunDiffuseMinMax
输出:
~berlin_floors_metal_catwalk1~f0baafa8.png
berlin_floors_metal_catwalk1_n.png
berlin_floors_metal_catwalk1_c.png
【问题讨论】:
-
您是否尝试过以 csv 格式打开文件?第一个角色是制造问题
-
不,我还没有。
-
我认为您实际上是在尝试读取恰好包含这些纹理文件名引用的二进制文件。您将有更好的时间为二进制格式编写真正的解析器。这些文件实际上来自哪里,您实际上想做什么?
-
来自使命召唤系列游戏。使命召唤 4、战争世界和黑色行动 1。这些是资产编辑器在您设置图像后吐出的材质文件。不幸的是,这些与 Black Ops 3 不交叉兼容。我认为该文件可能是二进制文件,但到目前为止,一切都很好。我正在做的是创建 3 个变量以插入到模板中以输出一个新的(兼容的)GDT 材质文件以用于 Black Ops 3。