ASCII-Text-Blöcke suchen und austauschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

Hallo Forum,
bin in letzter Zeit nicht wirklich in Python weitergekommen, da andere Projekte anstanden.
Ich hab heute eine wahrscheinlich für Euch kleine Aufgabenstellung, aber keinen blassen Schimmer, wie ich es anstellen soll.

Meine Anforderungen sollen sein einen ASCII-Text-File nach einem oder mehreren Text-Blöcken zu durchsuchen,
und diese dann mit einem neuen Text-Block (oder mehreren) aus einer oder verschiedenen ASCII-Datei stammend aus zu tauschen.

Ich hab im Forum schon mal geblättert, aber nicht das richtige nach meinem Geschmack gefunden.

Kann mir jemand von Euch einen Tipp geben, welche Methode man am besten anwenden sollte.

Vielen Dank schon mal im Voraus!

Cheers, 5inch
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie immer gilt: Zeig uns mal ein Beispiel!

Sind die Textblöcke fix oder stehen da spezielle "Markierungen", die nun ersetzt werden sollen?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

hi Hyperion,

danke das du dir die zeit nimmst!

hier ein bischen XML Code, den ich editieren möchte:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<configuration description="Export Images (MI) – AE160 - DIKAB2 (Ueberschriebene Farben)" id="MI3" min_version="1.5.9">
	<processor id="MIProcessor">
		<file_parameter id="FILE_NAME" required="true" locked="false" visible="true" display_name="Filename" />
		<folder_parameter id="SystemRoot"  required="true" locked="true" visible="true" display_name="System root"/>
		<enum_parameter id="LOD" value="1" display_name="Level of detail"/>
		<integer_parameter id="IMAGE_WIDTH" value="640" display_name="Bildbreite" comment="Bildbreite in Pixel" min_value="0"/>
		<integer_parameter id="IMAGE_HEIGHT" value="480" display_name="Bildhöhe" comment="Bildhöhe in Pixel" min_value="0"/>
		<float_parameter id="CAMERA_FOCAL" value="1.0" display_name="Brennweite" comment="Brennweite der Kamera" min_value="0"/>
		<float_parameter id="CAMERA_APERTURE" value="1.0" display_name="Blende" comment="Blendenbreite der Kamera" min_value="0"/>
		<folder_parameter id="IMAGE_GENERATION_PATH" value="C:\" display_name="Zielverzeichnis" comment="realtiver Zielpfad für Bilddateien" visible="false" locked="true"/>
		<enum_parameter id="IMAGE_TYPE" value="PNG" display_name="Bildformat" comment="Format der zu erzeugenden Bilddatei"/>
		<enum_parameter id="LIGHTING_TYPE" value="HEADLIGHT_4_SIDES" display_name="Beleuchtungsart" comment="Einstellung der Art der Beleuchtung"/>
		<enum_parameter id="LIGHTING_QUALITY" value="1" display_name="Beleuchtungsqualität" comment="Einstellung der Qualität der Beleuchtung"/>
		<enum_parameter id="VIEW" value="ISO" display_name="Ansicht" comment="Ansicht"/>
	</processor>
	
	<mi:configuration>

		<mi:material_container id="Material_Default"/>
		<mi:material_container id="Material_Roboter">
			<mi:material colour="26,26,26" epsilon="0.1">
			"mib_illum_phong"
			(
			"diffuse"	0.0 0.0 1 ,
			"ambient"	0.0 0.0 1 ,
			"specular"	1 1 1 ,
			"exponent"	50 ,
			"mode"	4 ,
			"lights"	[ "auto_light_0_inst", "auto_light_1_inst", "auto_light_2_inst", "auto_light_3_inst", "auto_light_4_inst" ]
			)
			</mi:material>
		</mi:material_container>
		<!-- Material fuer Bauteile -->
	</mi:configuration>
	
	<view id="Study View">
		<class id="PmNode">
			<property id="caption" value="$(caption)" default="$(name)"/>
			<property id="externalID" value="$(externalID)"/>
			<property id="miMaterial" value="Material_Default"/>
		</class>
		<class id="RobcadStudy" is_root="true" is_entry="true">
			<property id="children" value="$(children)" is_child="true"/>
			<external_aspect id="ENGDATA2" value="#TuneCells\$(externalID)\EngData\engData_ver2.xml"/>
			<external_aspect id="SNAPSHOT" value="#TuneCells\$(externalID)\EngData\.appCellViews.xml"/>
		</class>
ich möchte gerne diesen Teil mit einem neuen TextBlock austauschen:

Code: Alles auswählen

<mi:configuration>

		<mi:material_container id="Material_Default"/>
		<mi:material_container id="Material_Roboter">
			<mi:material colour="26,26,26" epsilon="0.1">
			"mib_illum_phong"
			(
			"diffuse"	0.0 0.0 1 ,
			"ambient"	0.0 0.0 1 ,
			"specular"	1 1 1 ,
			"exponent"	50 ,
			"mode"	4 ,
			"lights"	[ "auto_light_0_inst", "auto_light_1_inst", "auto_light_2_inst", "auto_light_3_inst", "auto_light_4_inst" ]
			)
			</mi:material>
		</mi:material_container>
kannst Du mir bitte einen Tipp geben, wie man da ran geht?

merci,

sG, 5inch
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

aehm soory falscher Block, ich wollte natürlich bis hier hin tauschen:

Code: Alles auswählen

 <mi:configuration>

      <mi:material_container id="Material_Default"/>
      <mi:material_container id="Material_Roboter">
         <mi:material colour="26,26,26" epsilon="0.1">
         "mib_illum_phong"
         (
         "diffuse"   0.0 0.0 1 ,
         "ambient"   0.0 0.0 1 ,
         "specular"   1 1 1 ,
         "exponent"   50 ,
         "mode"   4 ,
         "lights"   [ "auto_light_0_inst", "auto_light_1_inst", "auto_light_2_inst", "auto_light_3_inst", "auto_light_4_inst" ]
         )
         </mi:material>
      </mi:material_container>
      <!-- Material fuer Bauteile -->
   </mi:configuration>
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
BlackJack

@5inch: XML-Dateien sind keine Textdateien. Wenn man die als solche behandelt wird man früher oder später auf Probleme stossen. XML-Daten verarbeitet man mit Werkzeugen die XML verstehen.
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

hi BlackJack,

ok, verstehe, und wie mach ich das am besten?

:K

ich hab gesehen, da gibts in Python bestimmte Tools (LXML, usw...)
Stimmt das, sollte man so etwas nehmen?

sG, 5inch
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du kannst das vermutlich auch mit dem "ElementTree"-Modul aus der Standard Lib lösen; `lxml` bietet jedoch mehr, z.B. XPath uvm.

Wenn es keine Umstände macht, würde ich mir einfach mal `lxml` installieren und mich damit zum Ziel tasten :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

hi Hyperion,

danke für den Tipp, werd ich mir mal anschauen.
Meld mich wieder sobald ich etwas Code zu zeigen habe.

Merci,

sG, 5inch

:wink:
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Antworten