Diese Frage ist mit meinem unzureichenden Englisch etwas schwierig zu artikulieren, aber ich werde mein Bestes geben.
Ich habe ein Verzeichnis von XML-Dateien, jede Datei enthält XML wie:
<root>
<fields>
<field>
<description/>
<region id="Number.T2S366_R_487" page="1"/>
</field>
<field>
<description/>
<region id="Number.T2S366_R_488.`0" page="1"/>
<region id="String.T2S366_R_488.`1" page="1"/>
</field>
</fields>
</root>
Ich möchte die dot, tick, number
Zeichenfolgen, die die Notation wie .`0 enthalten, durch eine Indexnotation wie [0], [1], [2], ... usw. ersetzen.
Die transformierte XML-Nutzlast sollte also wie folgt aussehen:
<root>
<fields>
<field>
<description/>
<region id="Number.T2S366_R_487" page="1"/>
</field>
<field>
<description/>
<region id="Number.T2S366_R_488[0]" page="1"/>
<region id="String.T2S366_R_488[1]" page="1"/>
</field>
</fields>
</root>
Wie kann ich dies mit Python erreichen? Dies scheint ziemlich einfach zu sein, wenn man Regex verwendet, aber das wäre schwierig für ein Verzeichnis von Dateien, die mehrere Dateien enthalten. Ich würde gerne eine Implementierung mit Python 3.x sehen, während ich es lerne.
In Python können Sie mit os.listdir alle Dateien in Ihrem Verzeichnis durchlaufen und mit fileinput Ersetzungen vornehmen :
import os
import fileinput
path = '/home/arabian_albert/'
for f in os.listdir(path):
with fileinput.FileInput(f, inplace=True, backup='.bak') as file:
for line in file:
print(re.sub(r'\.`(\d+)', r'\[\1\]', line), end='')
Sie sollten dies jedoch über die Befehlszeile mit sed in Betracht ziehen:
find . -type f -exec sed -i.bak -E "s/\.`([0-9]+)/[\1]/g" {} \;
Das oben Gesagte ersetzt alle Dateien im aktuellen Verzeichnis und sichert mit alten Dateien mit .bak
.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen