Zeichensatz in Datei suchen und an bestimmter Stelle ersetze

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
meggers
User
Beiträge: 4
Registriert: Donnerstag 23. Juni 2011, 12:56

Hi!

Ich habe eine Datei die folgendermassen aussieht:

TITLE: FILM
FCM: NON-DROP FRAME
001 BL V C 00:00:00:00 00:00:00:00 00:59:53:00 00:59:53:00
001 25ER_STA V D 095 01:00:00:00 01:00:07:00 00:59:53:00 01:00:00:00
* EFF2_BLEND_DISSOLVE
* TO CLIP NAME: 25ER START
* SOURCE FILE: (NULL)
002 B006C016 V C 08:56:57:14 08:57:05:08 01:00:00:00 01:00:07:19
* FROM CLIP NAME: 1/1-2 MOS
* SOURCE FILE: B006C016_110513_R34X
003 B006C019 V C 09:09:33:09 09:09:41:06 01:00:07:19 01:00:15:16
* FROM CLIP NAME: 1/0-3 MOS
* SOURCE FILE: B006C019_110513_R34X
004 B007C001 V C 09:20:34:20 09:20:39:16 01:00:15:16 01:00:20:12
* EFF2_BLEND_FLIP_HORZ
* FROM CLIP NAME: 1/2-1
* SOURCE FILE: B007C001_110513_R34X

Die Datei ist sehr viel laenger als der Auszug hier sonst wuerde ich es haendisch machen. Was passieren muesste: Der Teil der hinter * SOURCE FILE: kommt also zB B006C016_110513_R34X muss eingelesen werden und dann das Obere ersetzen hinter 002 also B006C016 sodass dann bei Nr2 nicht mehr steht: 002 B006C016 V C 08:56:57:14 08:57:05:08 01:00:00:00 01:00:07:19
sondern eben 002 B006C016_110513_R34X V C 08:56:57:14 08:57:05:08 01:00:00:00 01:00:07:19

Meine Idee war, alle * SOURCE FILE in ein Array zu laden und dann die Liste nochmal abarbeiten und die 001, 002, 003 usw ersetzen. Weiss nur nicht, wie ich mir die entsprechenden Zeichenketten vernuenftig rauspicke... Waere super, wenn da jemand helfen koennte!

Vielen Dank und Gruss :)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Zeig doch mal, was du bisher bereits an Code hast und markiere die Stellen, an denen du nicht weiterkommst.

Sebastian
Das Leben ist wie ein Tennisball.
meggers
User
Beiträge: 4
Registriert: Donnerstag 23. Juni 2011, 12:56

so. habe mich jetzt gar nicht mehr gemeldet. Habe es dann doch noch hinbekommen, dank Galileos Openbook. Vielleicht hat ja noch jemand Verwendung dafür. Muss man aber je nach EDL anpassen, da Final Cut Pro zB etwas andere EDLs ausspuckt als Avid. Viel Spaß:

Code: Alles auswählen

import sys
edl = sys.argv[1]
src_edl = open(edl, "r")
src_file_list = []
unknown_src_name = []
for line in src_edl:
	unknown_src_name = line.split()
	if line.startswith("* SOURCE FILE:") and unknown_src_name[3] != "(NULL)":
		src_file_list.append(line.lstrip("* SOURCE FILE: ").strip())
"""print(src_file_list)"""
src_edl.close()


src_edl = open(edl, "r")
mod_edl = open(src_edl.name.rstrip(".EDL")+"_mod.EDL", "w")
split_line = []
i = 0
for new_line in src_edl:
	split_line = new_line.split()
	if split_line[0].isdigit() == True and split_line[3] == "C" and split_line[1] != "BL":
		new_tape_name = src_file_list[i]
		old_tape_name = split_line[1]
		line_to_write = new_line.replace(old_tape_name, new_tape_name)
		i = i+1
		print(old_tape_name+" -> "+new_tape_name)
		mod_edl.write(line_to_write)
	else:
		mod_edl.write(new_line)
mod_edl.close()	
src_edl.close()
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ein paar Anmerkungen:

- Das OpenBook ist nicht die optimale Basis: http://bj.spline.de/python_openbook.html
- Eingerückt wird normalerweise mit 4 Leerzeichen
- sys.argv[1] - was passiert wenn es sys.argv[1] nicht gibt? Ich empfehle dir argparse mal anzuschauen
- Dateien öffnet man am Besten mit dem `with`-Statement
- am besten ein "if __name__ == '__main__': main()" Konstrukt verwenden, das ermöglicht dir das Importieren dieser Datei

//Edit: siehe eins weiter unten
Zuletzt geändert von Dav1d am Dienstag 25. Oktober 2011, 14:36, insgesamt 1-mal geändert.
the more they change the more they stay the same
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Dav1d hat geschrieben:- Eingerückt wird normalerweise mit 3 Leerzeichen
PEP-8 sagt: "Use 4 spaces per indentation level."
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Oh, ich wollte natürlich 4 schreiben (im Code sind es 3)
the more they change the more they stay the same
Antworten