Seite 1 von 1

Welche Schleife für If-then-else?

Verfasst: Dienstag 16. Dezember 2014, 13:33
von MoeJo
Hallo zusammen,

als blutiger Anfänger versuche ich mich an End2End-Checks für verschiedene Dienste.
Für jedes Script soll eine Textdatei mit den Reultaten geschrieben werden. Wenn eine Textdatei mit dem entsprechenden Namen besteht, soll diese erst gelöscht werden und eine neue Datei geschrieben werden.

Nun stehe ich vor dem Problem das ich nicht weiß welche Schleife hierfür genau die richtige wäre und hoffe ihr könnt mir helfen.

Im grunde soll erst geschaut werden, ob eine entsprechende Textdatei besteht und wenn ja, soll diese gelöscht werden. Mein Code lautet wie folgt:

Code: Alles auswählen

myfile="C:/test.txt"
if os.path.isfile(myfile):
        os.remove(myfile)
Mein Code zum schreiben der Textdatei sieht wie folgt aus:

Code: Alles auswählen

try:
    f = open("test.txt", "w")
    try:
        f.write('test test test')
        f.writelines
    finally:
        f.close()
except IOError:
    pass
Nun fehlt mir die Verbindung zwischen den beiden Codes.
In meiner Vorstellung sollte die Schleife wie folgt ablaufen:
If Datei besteht, dann lösche diese und schreibe eine neue Datei, sonst schreibe direkt eine neue Datei.

Ist eine solche Schleife in Python realisierbar oder wie kann ich meine Ansprüche verpacken?

Leider bin ich blutiger Anfänger und ratlos. Ich hoffe Ihr könnt mir helfen.

Viele Grüße
MoeJo

Re: Welche Schleife für If-then-else?

Verfasst: Dienstag 16. Dezember 2014, 13:48
von Sirius3
@MoeJo: was hat Dein Problem mit Schleifen zu tun? Hier soll doch nichts wiederholt werden, das ist nicht einmal ein if-else, weil der zweite Teil, neue Datei schreiben, immer gemacht wird. Also ist das nur eine Aneinanderreihung.

Um Deine Bemühungen vollends zu torpedieren: open mit 'w' erzeugt eine neue Datei oder löscht den Inhalt, falls die Datei schon existiert. Die Abfrage am Anfang ist also überflüssig. PS: Exceptiones sollte man nicht einfach so verschweigen. Das writelines macht nix, weil das nur die Methode referenziert, aber nicht aufruft.
Was bleibt:

Code: Alles auswählen

with open("test.txt", "w") as f:
    f.write('test test test')

Re: Welche Schleife für If-then-else?

Verfasst: Dienstag 16. Dezember 2014, 13:50
von /me
Eine Schleife sehe ich da nicht. Prinzipiell brauchst du doch nur die beiden Codeteile sequenziell ablaufen lassen.

Abgesehen davon ist das Löschen unnötig. mode="w" sorgt doch beim open dafür, dass eine eventuell bestehende Datei geleert und neu beschrieben wird.

Re: Welche Schleife für If-then-else?

Verfasst: Dienstag 16. Dezember 2014, 14:07
von MoeJo
Oh man...

ich danke euch!

Ist es auch möglich der Datei einen Pfad mitzugeben, sodass ich diese beispielsweise direkt auf C://Benutzer/MoeJo/test.txt ablegen kann?

Nochmals vielen Dank und Grüße!

Re: Welche Schleife für If-then-else?

Verfasst: Dienstag 16. Dezember 2014, 14:10
von EyDu
MoeJo hat geschrieben:Ist es auch möglich der Datei einen Pfad mitzugeben, sodass ich diese beispielsweise direkt auf C://Benutzer/MoeJo/test.txt ablegen kann?
Manche Dinge kann man einfach ausprobieren ;-)

Re: Welche Schleife für If-then-else?

Verfasst: Dienstag 16. Dezember 2014, 14:10
von BlackJack
@MoeJo: Ja man kann bei `open()` auch komplette Pfade inklusive Dateinamen angeben. Das hättest Du aber auch einfach schnell mal ausprobieren können. :-)

Re: Welche Schleife für If-then-else?

Verfasst: Dienstag 16. Dezember 2014, 14:47
von MoeJo
Oh man²...
wie gesagt, ich bin blutiger Anfänger aber beide Fragen von mir waren :K ...

Trotzdem vielen lieben Dank für eure netten Antworten!

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 17. Dezember 2014, 14:37
von MoeJo
Nun möchte ich wissen, wie lange es dauert bis mein Test durchgelaufen ist. Die Zeitangabe soll -wie auch meine anderen Werte- in einer Textdatei ausgegeben werden.

Code: Alles auswählen

start = datetime.now()
.
.
.
end = datetime.now()
timediff= end - start

with open("C:/TestResults/test.txt", "w") as f:
    f.write(timediff)

Nun bekomme ich die Fehlermeldung:

TypeError: expected a character buffer object

Hat jemand eine Idee wie ich mir die Dauer des Tests in meiner Textdatei ausgeben lassen kann?

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 17. Dezember 2014, 14:42
von Sirius3
@MoeJo: In eine Datei kannst Du nur Zeichen schreiben, und nicht ein Datum. Du mußt das Datum erst in einen String verwandeln.

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 17. Dezember 2014, 15:11
von MoeJo
Wow, danke!
Klasse wie hilfsbereit Ihr hier seid!

Muss Euch dann aber nochmals belagern :?

In meiner Ausgabe steht nun nach dem ersten Testdurchlauf als Zeitangabe: 0:00:13.768000

Wie kann ich diese nun auf volle Sekunden bringen? Brauch weder Stunden, Minuten, noch Millisekunden :)

Hoffe, ich nerv nicht...

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 17. Dezember 2014, 15:54
von Sirius3
@MoeJo: sowas findet man ganz einfach heraus, indem man sich anschaut, welche Methoden timediff bietet.

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 17. Dezember 2014, 16:21
von cofi
Hier mal eine kleine Session, die Sirius3 Vorschlag demonstriert:

Code: Alles auswählen

In [5]: import datetime

In [6]: t1, t2 = datetime.datetime.now(), datetime.datetime.now()

In [7]: diff = t2 - t1

In [8]: type(diff)
Out[8]: datetime.timedelta

In [9]: dir(diff)
Out[9]: 
[
 ...
 'days',
 'max',
 'microseconds',
 'min',
 'resolution',
 'seconds',
 'total_seconds']

In [10]: diff.seconds
Out[10]: 0

In [11]: diff
Out[11]: datetime.timedelta(0, 0, 26)

In [12]: diff.microseconds
Out[12]: 26

Re: Welche Schleife für If-then-else?

Verfasst: Donnerstag 18. Dezember 2014, 13:39
von MoeJo
Hab es jetzt wie folgt gelöst:

Code: Alles auswählen

start-time = datetime.now()
.
.
.
end_time = datetime.now()
timediff = end_time - start_time
str_timediff = str(timediff.seconds)
Grüße Moe

Re: Welche Schleife für If-then-else?

Verfasst: Donnerstag 18. Dezember 2014, 14:47
von MoeJo
Mein Script ist nun fast fertig. Das einzige was mir noch fehlt, ist der Logout-Vorgang.
Leider habe ich keine Ahnung wie ich folgenden Logout mit Python abgreifen kann:

Code: Alles auswählen

<a class="has_bottom_tooltip" data-method="delete" data-original-title="Logout" href="/users/sign_out" rel="nofollow" title="Logout"><i class='icon-signout'></i>

Code: Alles auswählen

driver.find_element_by...
stellt keine Lösung dar?!

Ich hoffe, Ihr habt eine Idee und könnt mir auf die Sprünge helfen.

Re: Welche Schleife für If-then-else?

Verfasst: Donnerstag 18. Dezember 2014, 15:34
von Sirius3
@MoeJo: Programmieren ist nicht, sich wahllos irgendwelche Attribute zu nehmen, die sich richtig anhören, und zu behaupten, dass jetzt alles funktioniert! Man sollte sich zumindest die Dokumentation dazu durchlesen.
Dann kommt man auch auf eine korrekte Lösung:

Code: Alles auswählen

str_timediff = '{:.0g}'.format(timediff.total_seconds())
II. ich würde ja nach einem <a>-Tag mit title "Logout" suchen.

Re: Welche Schleife für If-then-else?

Verfasst: Donnerstag 18. Dezember 2014, 16:06
von MoeJo
@ Sirius3
Anhand meiner Ausgabe sehe ich doch ob meine Logik funktioniert?!
Hab bei deiner, als auch bei meiner Lösung das identische Ergebnis in der Ausgabe. Könntest du mir den Unterschied erklären?
Ich würde doch nicht wahllos Behauptungen aufstellen, die nicht zutreffend sind!

zu II:
wie suche ich denn nach dem <a>-Tag?

Mein 1. Versuch war:

Code: Alles auswählen

driver.find_element_by_xpath("//a[@title='Logout']").click()
Leider erfolglos...

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 7. Januar 2015, 13:27
von MoeJo
Leider habe ich noch keine Lösung für mein Problem gefunden und schiebe den Thread nochmal nach oben.
Ich hoffe das ist in Ordnung

Liebe Grüße und ein frohes neues Jahr allen zusammen!
MoeJo

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 7. Januar 2015, 13:33
von BlackJack
@MoeJo: Da der Link ein Attribut mit dem Namen `data-original-title` hat, welches auch den Wert 'Logout' liegt die Vermutung nahe dass das `title`-Attribut von JavaScript-Code verändert wird. Sonst müsste man sich den Originalwert ja nicht noch mal irgendwo anders merken.

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 7. Januar 2015, 14:59
von MoeJo
@ BlackJack:
Wie gesagt, meine Stärken liegen nicht in der Programmierung aber ich versuche mein Wissen aufzubessern.
Wenn das title-Attribut verändert wird, ist es doch suboptimal wenn ich nach diesem Attribut suchen lasse oder verstehe ich dich falsch?
Ist es nicht möglich, einfach nach der <i class="....> zu suchen?


Ich schick euch mal anbei den Quellcode:

Code: Alles auswählen

<body class="ui_mars application" data-page="dashboard:show">
<header class="navbar navbar-static-top navbar-lab">
<div class="navbar-inner">
<div class="container">
<ul class="nav">
<li>
<a class="has_bottom_tooltip" title="" rel="nofollow" href="/users/sign_out" data-original-title="Logout" data-method="delete"><i class="icon-signout"></i></a></li>
Wäre superlieb wenn ihr mir den richtigen Wink geben könnt, vorausgesetzt ihr habt einen Ansatz um den "Logout-Button" zu betätigen. Mein komplettes Skript hängt nur noch am Logout :K
Natürlich will ich keine fertige Lösung aber seit 14 Tagen bekomme ich keinen Fuß in die Tür und hab nichtmals mehr einen Ansatz...

Grüße

Re: Welche Schleife für If-then-else?

Verfasst: Mittwoch 7. Januar 2015, 15:21
von BlackJack
@MoeJo: Ja nach dem ``<i>``-Element kann man auch suchen und dann ein Element wieder hoch gehen um das ``<a>``-Element zu finden.