Datum

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
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

Hallo
Ich möchte gern in mein Skript einbauen das das aktuelle Datum in eine Datei schrieben wird
hab mir gedacht sowas wie:
Datei öffnen und schreiben also
file=open('datei.py' 'w+')
und in der Datei stehen 2 Zeilen
in der zweiten Zeile steht
Sidate= 29.10.2009
genau dieses Datum muss dann immer ausgetauscht werden mit dem heutigen Datum.
quasi:
Sidate= 18.10.2010
hat jemand vll eine Idee wie ich das umsetze?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ein paar Anregungen:

- Dateien öffnet man folgendermaßen:

Code: Alles auswählen

with open() as irgendwas:
    # irgendwas ist hier ein file object
- re-Modul zum Parsen und Finden des Datums
- datetime Modul für das aktuelle System-Datum und per strftime-Funktion / Methode das in Form bringen

Ich denke damit solltest Du zum Ziel kommen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ok hab nun was Probiert und versucht

Code: Alles auswählen

date = time.mktime(time.strptime(re.split('^sidate\s*=([0-9]{2}\.[0-9]{2}\.[0-9]{4})?$', line.lower().strip())[1], '%d.%m.%Y')).replace('%d.%m.%Y','localtime')
und es funktioniert. :)
und danke Hyperion grad als ich sagen wollte ich habs hab ich deinen Post gesehn. :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Bua... sieht aber nicht hübsch aus!

Ich dachte eher so in dieser Richtung:

Code: Alles auswählen

In [30]: from datetime import date

In [31]: import re

In [32]: text = u"""
bla schwall sonst was
Sidate= 29.10.2009
badads asdasfasfasf
"""

In [37]: tokens = re.split("\d{2}\.\d{2}\.\d{4}", text)

In [38]: tokens
Out[38]: [u'\nbla schwall sonst was\nSidate= ', u'\nbadads asdasfasfasf\n']

In [39]: date.today().strftime("%d.%m.%Y")
Out[39]: '18.10.2010'

In [40]: today = date.today().strftime("%d.%m.%Y")

In [41]: today.join(tokens)
Out[41]: u'\nbla schwall sonst was\nSidate= 18.10.2010\nbadads asdasfasfasf\n'
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

sieht vll nich hübsch aus aber wenn ich deine zeilen einbau dann hab ich noch mehr zeilen und ich glaub so wie ihr am Freitag schon geguggt habt das das keine gute Idee is ^^.
Bevor ich neuen Thread öffne gibt es sowas wie Ordner kopieren?
denn ich muss ein update skript machen das mein jetziges Skript beendet bzw killt. alles kopiert in nen Ordner wirft das alte löscht und das Skript was ich geschrieben hab wieder startet
derzeit sieht das mal so aus...

Code: Alles auswählen

#!/usr/bin/env python
from __future__ import with_statement
import os,signal
import cStringIO
import os.path
import sys
import re
config_file = 'dp_clienttask.ini'
choices = (
          '9',                # 9: Updatet the Python-Script.
           )
class Backup():
 def __init__(self,config_file, choices,):
  self.config_file=config_file
  self.choices = choices
 def read_config(self):
     choice= None
     try:
         file = open(self.config_file)
         for line in file.readlines():
             if line.lower().strip().startswith("boottime"):
                 choice = re.split('^boottime\s*=\s*([0-9]+)[^0-9]*?$', line.lower().strip())[1]
     except Exception, e:
         print >> sys.stderr, '''Error: File "%s" (configuration file) couldn't be read!\nQuitting.''' % self.config_file
         file.close()
 def kill_script(self):
     pid = os.getpid()
     open('dp_backup.lock', 'w').write(str(pid))
     with open('dp_backup.lock') as config:
        for line in config:
                os.kill(int(line), signal.SIGTERM)

 def copy_script(self):
    shutil.copy('dp_client.py','Linux_Client')

 def run_script(self):
    os.system('dp_client.py')
        print 'dp_client.py wird gestartet!'
ich hoff ihr kennt euch noch aus :P
Also beim kill hab ich irgendwo nen Wurm und das Kopieren will auch net so ganz
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

bluelagoon hat geschrieben:sieht vll nich hübsch aus aber wenn ich deine zeilen einbau dann hab ich noch mehr zeilen und ich glaub so wie ihr am Freitag schon geguggt habt das das keine gute Idee is ^^.
Man kann das ja auch alles in eine Zeile quetschen, wenn man mag:

Code: Alles auswählen

In [42]: date.today().strftime("%d.%m.%Y").join(re.split("\d{2}\.\d{2}\.\d{4}", text))
Out[42]: u'\nbla schwall sonst was\nSidate= 18.10.2010\nbadads asdasfasfasf\n'
Ich wollte Dir ja eher demonstrieren, wie ich vorgegangen bin. Und das wird eher ersichtlich, wenn man die Entwicklung Schritt für Schritt zeigt.

Zudem ist die schiere Anzahl an Zeilen an sich kein Problem, sofern der Code dadurch leserlich wird. Man kann auch zu viel in eine Zeile quetschen... ich denke genau da liegt bei Deiner Variante das Problem. Meine Variante kann man inkl. der "with open..."-Zeile lesbar in drei bis vier Zeilen schreiben.
bluelagoon hat geschrieben: Bevor ich neuen Thread öffne gibt es sowas wie Ordner kopieren?
Schau doch mal in der Doku nach. Kapitel 11 schreit doch vom Titel her danach, als das man wenn dort fündig würde. (Und das wird man auch... ;-) )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

hab heut doku über shutil.copy gelesen aber ich seh grad das irgendwo anders mein Fehler liegt denn mein unterer Teil vom Code ist nicht eingefärbt.
Naja ich hab für das Skript ne Doku keine Angst falls ich mal Nachfolger haben werd (Warscheinlichkeit von 100%) dann kann er meine dazu-verfasste Doku lesen und die ist ausführlich erklärt ^^
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

höhö hat geklappt
verbesserter Code:

Code: Alles auswählen

 def kill_script(self):
     pid = os.getpid()
     open('dp_backup.lock').write(str(pid))
     with open('dp_backup.lock') as config:
        for line in config:
                os.kill(int(line), signal.SIGTERM)
BlackJack

@bluelagoon: Kannst Du vielleicht mal den Sinn einer Lock-Datei erklären für einen Prozess der direkt nach dem Anlegen der Datei gekillt wird!? Und warum Du die PID zum killen aus der Datei liest? Du hast die doch schon im Programm.
Antworten