Anfänger sucht Hilfe mit Timecode Generator

Du hast eine Idee für ein Projekt?
Antworten
crlin
User
Beiträge: 4
Registriert: Montag 2. Mai 2016, 10:56

Hallo,

ich bin noch ein Anfänger, was Python angeht... aktuell benötige ich ein Script, welches Timecodes im Format
nnn <tab> nnn <enter>
nnn <tab> nnn <enter>
usw.

generiert und in eine Textdatei schreibt.

Ich bin gerade in den ersten Zeilen des Scripts, da fällt mir aber schon ein Problem auf: jedes Mal, wenn das Script gestartet wird, soll eine unterschiedliche Menge Timecodes generiert werden. Hier weiß ich nicht, wie ich das mit den Variablen handeln soll (da ja jedes Mal unterschiedlich viele Variablen benötigt werden).

Beispiel Textdatei:
000* 330
330 630
630 734
745 800

Die erste Zahl ist immer 000; übrigens auch nicht 0, sondern 000, weshalb ich sie als str gespeichert habe. Danach folgt ein tab und eine Zahl, die aus einer Benutzereingabe generiert wird. Der Benutzer gibt m:ss oder mm:ss ein, dann wird die Zahl in ss umgewandelt.
Also aus 3:00 wird 180, aus 1:30 wird 9, aus 2:45 wird 165.....

In der zweiten Zeile wird automatisch die zuvor generierte Zahl als Ausgangswert genommen und die nächste Benutzereingabe wird hinzuaddiert. Also wenn wir in der ersten Zeile aus 05:30 Minuten dann die 330 generiert hatten, wird aus den nächsten 05:00 Minuten (=300 Sekunden) die 630, etc.

Es sollen so lange Zahlenpaare generiert werden, bis das Script beendet wird; nach Möglichkeit einfach mit STRG+C (oder gibt das Probleme damit, wenn sämtliche Werte ja noch in einer Textdatei gespeichert werden sollen??).

Der Ablauf sollte so sein, dass jede Usereingabe automatisch hochgezählt wird. Also "Wert 01: ", dann "Wert 02: ", ...

Mein Script ist wie gesagt noch sehr sehr mager, da ich gar keine Idee habe, wie ich jetzt weiter vorgehen soll.

Code: Alles auswählen

#!/usr/local/bin/python3
# v0.1

# first timecode is always 000;
# in order to be "000" instead of
# "0", this will be str rather
# than int.

begin = "000";
projectn = input('Projektname: ')

#debug
#print (projectn);

formel= os.system("awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'")
wert = 0:

Zur Erklärung:
Variabel "begin" einfach, um den Wert mit der dreifachen Null fest zu definieren
Variabel "projectn" wird benötigt, damit die Textdatei nachher unter dem definierten Namen gespeichert werden kann
"formel" dient dazu, den eingegebenen Wert aus mm:ss in ss zu konvertieren (so habe ich es vorher mit einem Bash Script gemacht, welches allerdings nur mm:ss als Parameter einliest und entsprechend pro Aufruf nur einen Wert generiert.
"wert" soll dann immer durch wert = wert + benutzereingabe (integer) erweitert werden.

Sorry, falls das eine echt simple Angelegenheit ist, aber ich bin wirklich blutiger Anfänger was Python anbelangt...

Danke für Eure Hilfe & LG
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine Festlegung von "000" als Startwert ist nicht zielfuehrend.

Schreib dir stattdessen eine Funktion, welche eine normal Zahl nimmt, und einen dreistelligen String zurueckliefert. Das kannst du entweder "zu Fuss" machen, oder das Python String-Formatting benutzen, welches solche Probleme schon loesen kann.

Und ich denke mal ihr habt in der Uni/Schule/Wasauchimmer schon etwas ueber schleifen gelernt, das musst du dann hier zur Anwendung bringen.

Last but not least: das mit dem os.system bitte vergessen. Es gibt zb im time-Modul die Funktion strftime, damit solltest du deine Eingabe verarbeiten koennen.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@crlin:
awk ist in einem Python-Skript total unnötig. Alles was awk kann, sollte Python auch können. Versuche als Übung doch besser, das awk-Skript in seiner Funktionsweise zu verstehen. Diese überträgst du dann in reines Python. Das mag etwas aufwändiger sein, aber dafür bekommst du ein besseres Verständnis von awk und von Python.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Zur eigentlichen Frage: Du benötigst zuerst eine Funktion, die eine Zeitangabe von ihrer Textform in Sekunden als Zahl bringt. Hier kannst du dich entscheiden ob du strptime() aus dem time-Modul nutzen willst oder ob du es zu Fuß machst. Für letzteres ist sicherlich die split()-Methode von Zeichenketten sowie die int()-Funktion einen Blick wert. Und dann müsstest du noch überlegen wie du mit Stift und Papier aus einer solchen Zeitangabe die Sekunden herausfinden würdest. Dabei kannst du dich natürlich an der awk-Zeile orientieren. Ich weiß ja nicht ob die von dir ist oder ob du sie von woanders übernommen hast...
Antworten