Извлечение строк из каталога, полного файлов - PullRequest
0 голосов
/ 30 марта 2020

Проблема: у меня есть каталог из более чем 7000 файлов (иногда больше, иногда меньше.) Ни один из этих файлов не имеет расширения файла. Каждый файл имеет неизвестную кодировку (скорее всего, двоичную), но я могу прочитать его как отдельный файл с базовым кодом c, ЕСЛИ я добавляю расширение к файлу. Так как он не закодирован в 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()

ВХОД: ² Ï<br> @ Ð 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

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Этот код теперь завершен, и код обновляется с учетом изменений. Большое спасибо AKX

0 голосов
/ 31 марта 2020

Несмотря на то, что я до сих пор поддерживаю мой комментарий о том, что вы должны выяснить двоичный формат файла, в данном конкретном случае для вас может сработать регулярное выражение для поиска всех достаточно длинных (здесь 3+ символов) идентичных строк. , Я вставил data из вашего поста здесь, но вы также можете прочитать его из файла:

import re

data = """
®   Î       @           P    ˆ
         @   d   ð     Î   ù       %   1  X  ÍÌL?ÍÌL@  ˆÀ   ?d    €?  €?  €?  €?n        €?      €?l_sm_r0c0n0s0 okinawa_ceiling_concrete_bunker okinawa_ceiling_concrete_bunker_c colorMap normalMap okinawa_ceiling_concrete_bunker_n specularMap ~okinawa_floor_concrete_spott~c12191f9 envMapParms colorTint dynamicFoliageSunDiffuseMinMax

²   Ï
"""

identifiers = re.findall("([~_a-z0-9]{3,})", data, flags=re.I)

print(identifiers)

output

[
    "l_sm_r0c0n0s0",
    "okinawa_ceiling_concrete_bunker",
    "okinawa_ceiling_concrete_bunker_c",
    "colorMap",
    "normalMap",
    "okinawa_ceiling_concrete_bunker_n",
    "specularMap",
    "~okinawa_floor_concrete_spott~c12191f9",
    "envMapParms",
    "colorTint",
    "dynamicFoliageSunDiffuseMinMax",
]
...