Seite 1 von 1

Zeichensatz in Datei suchen und an bestimmter Stelle ersetze

Verfasst: Donnerstag 23. Juni 2011, 13:03
von meggers
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 :)

Re: Zeichensatz in Datei suchen und an bestimmter Stelle ers

Verfasst: Donnerstag 23. Juni 2011, 13:14
von EyDu
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

Re: Zeichensatz in Datei suchen und an bestimmter Stelle ers

Verfasst: Dienstag 25. Oktober 2011, 13:59
von meggers
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()

Re: Zeichensatz in Datei suchen und an bestimmter Stelle ers

Verfasst: Dienstag 25. Oktober 2011, 14:08
von Dav1d
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

Re: Zeichensatz in Datei suchen und an bestimmter Stelle ers

Verfasst: Dienstag 25. Oktober 2011, 14:18
von /me
Dav1d hat geschrieben:- Eingerückt wird normalerweise mit 3 Leerzeichen
PEP-8 sagt: "Use 4 spaces per indentation level."

Re: Zeichensatz in Datei suchen und an bestimmter Stelle ers

Verfasst: Dienstag 25. Oktober 2011, 14:36
von Dav1d
Oh, ich wollte natürlich 4 schreiben (im Code sind es 3)