Je souhaite enlever plusieurs lignes de texte sur un nombre très important de fichiers enregistrés en ASCII. Ces fichiers sont des scènes Maya (un soft de 3D) pesant de quelques Ko à 300Mo.
A la louche, il y a une dizaine de milliers de fichiers à traiter.
Je chercher à enlever ces lignes si elles sont présentes:
requires "mayall_maya70" "0.9.1(Beta)";
requires "elastikSolver" "0.991";
requires "RenderMan_for_Maya" "3.0.1";
Pourquoi?
Si elles sont là, Maya essaie de trouver les plugins en question et met une 30aine de secondes en plus pour charger la scène. Les artistes râlent du temps d'ouverture des scènes, ça me retombe dessus etc...
J'ai fait un premier jet d'un script permettant de parser chaque scène et enlever les lignes indésirables. Le hic, c'est que ça met du temps et vu la masse de fichier à traiter, j'aimerais bien optimiser ça.
from pathlib import Path
skip_list = ['requires "mayall_maya70" "0.9.1(Beta)";\n', 'requires "elastikSolver" "0.991";\n', 'requires "RenderMan_for_Maya" "3.0.1";\n', 'requires "maxwell" "2.6.17";\n', 'requires "maxwell" "2.7.11";\n']
for maya_scene in Path(r'T:\Michelin_Surete').glob('**/*.ma'): #Les scenes Maya ont l'extension .ma
maya_scene = str(maya_scene)
print("Processing ", maya_scene)
file_content = []
with open(maya_scene,"r") as input:
for line in input:
if line in skip_list:
print("Erased :", line)
else:
file_content.append( line )
with open(maya_scene,"w") as output:
output.writelines(file_content)
Est-ce que vous pouvez me donner quelques pistes pour améliorer ça? N'y a t'il pas un meilleur moyen que d'ouvrir en lecture puis ouvrir en écriture le fichier pour appliquer les modifs? Aurais-je un gain de perf si je multithread tout ça?