Wie entferne ich Text in einer .jbeam -Textdatei ohne JSON?Python

Python-Programme
Guest
 Wie entferne ich Text in einer .jbeam -Textdatei ohne JSON?

Post by Guest »

Ich kann keinen Standard -JSON -Parser verwenden, da ich mit .JBeam -Dateien arbeite, die auf JSON basieren, aber ein benutzerdefiniertes Format folgen, das intern von Beamng verwendet wird. Diese Dateien enthalten eindeutige Formatierungsregeln, die Standard -JSON -Parsers scheitern lassen, z. Die Aufgabe, die ich zu erledigen versuche, ist relativ einfach: Ersetzen Sie die Eigenschaft der Knoten durch einen neuen Text in einem bestimmten Format, während die Gesamtformatierung der Originaldatei erhalten bleibt (was ziemlich groß ist, obwohl ich nur benutze Ein vereinfachtes Beispiel hier). Die Verwendung eines Standard -JSON -Parsers verändert jedoch auch die Formatierung anderer Eigenschaften in der Datei. Ich habe versucht, die in diesem Thread beschriebene Lösung, aber sie wurde schnell umständlich, da ich alles einwickeln musste, um die Formatierung der Datei zu bewahren, was für eine so einfache Aufgabe keinen Sinn ergibt. Die ursprüngliche Formatierung ist wichtig, denn ohne sie haben Sie einen Albtraum -Lesart. JBEAM -Dateien, da sie die Anzahl der Zeilen erhöhen und die Lesbarkeit drastisch verringern würden. Letztendlich beschlossen, den einfachsten Ansatz zu verfolgen, indem er einen grundlegenden Textersatz verwendet hat. Selbst für einfache Operationen wie das Entfernen von Text habe ich jedoch Probleme. Ich weiß, dass diese Aufgabe leicht mit einem Bash -Skript behandelt werden könnte, aber ich bin gespannt, warum es sich als so schwierig mit Python erweist. Wie kann ich den Inhalt der Knoten in diesem Beispiel mit Python effizient entfernen?

Code: Select all

sample_jbeam = '''
{
"partname": {
"refNodes": [
["ref:", "back:", "left:", "up:", "leftCorner:", "rightCorner:"],
["ref", "", "", "", "", ""]
],
"nodes": [
["id", "posX", "posY", "posZ"],
["ref", 0, 0, 0],
["b1", 1.0, 1.0, 1.0],
],
"beams": [
],
}
}
'''
< /code>
Ich möchte den Inhalt in "Knoten" entfernen, damit ich mit: < /p>
übrig bin: < /p>
{
"partname": {
"refNodes": [
["ref:", "back:", "left:", "up:", "leftCorner:", "rightCorner:"],
["ref", "", "", "", "", ""]
],
"nodes": [],
"beams": [
],
}
}
Da ich den Python -JSON Loader nicht verwenden kann, weil JBeam nicht wirklich JSON ist und JSON neben JSON die Formatierung der Originaldatei ändert.
fehlgeschlagener Versuch 1: Regex < /h1>
Ich habe Regex ausprobiert, aber es funktioniert nicht: < /p>

Code: Select all

pattern = r'("nodes":\s*)\[.*?\]'
# cleaned_text = re.sub(pattern, r'\1[]', sample_jbeam, flags=re.DOTALL)
cleaned_text = re.sub(r'"nodes": \[.*?\]', '"nodes": []', text, flags=re.DOTALL)
print(cleaned_text)
Versuch 2: io.stringio
Ich habe versucht, io.stringio () wie in meinem Antwortbeitrag, aber nachdem ich die JBeam -Formatierung geändert habe, hat es nicht mehr funktioniert. Wirklich gut, wenn Sie den JBEAM -JSON gültig machen, aber leider wird auch die ursprüngliche Formatierung geändert. legitimes Problem, für das ich keine Lösungen finden kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post