bestimmten Ordner suchen

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.
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

jo dann Realisier es in Python wenn dir Python leichter fällt und ich warte drauf was ihr da rausbekommt.
warum macht Python auf Windows und Linux so n riesen Unterschied wenn ich
os.system("file.py")
eingeb
unter Windows funktioniert und unter Linux folgendes ausgibt?
python lastfile1.py
sh: file.py: Kommando nicht gefunden
und nur bash-befehle wie cat ls -l un so funktionieren? macht das überhaupt Sinn?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

eyescube hat geschrieben:+hust+ ich hab auch PHP gelernt in einer Schulung und Python nicht das isn Unterschied
Na so was. Du hattest doch gesagt, dass du ein paar Tutorials durchgearbeitet hättest. De facto bist du aber nicht einmal in der Lage, in dem von dir laut eigener Aussage gekonnten PHP eine Lösung vorzulegen.

Ich komme mir hier hier verarscht vor. Wenn du dich nicht mit Python beschäftigen möchtest, dann ist das dein gutes Recht. Dann geh aber nicht her und tu so, als wolltest du lernen. Du willst eine fertige Lösung, das ist alles.

Deine bisher gezeigten Fähigkeiten als Softwareentwickler sind nicht gut, da du selbst beim Umgang mit elementaren Konzepte Schwierigkeiten zeigst. Deine kommunikativen und sozialen Fähigkeiten hingegen sind in einem auch nur halbwegs professionellen Umfeld gar nicht zu gebrauchen.

Code: Alles auswählen

entry = sorted([(os.path.getmtime(os.path.join(pathname, filename)), 
                filename) for filename in os.listdir(pathname)])[-1]
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

eyescube hat geschrieben:jo dann Realisier es in Python wenn dir Python leichter fällt und ich warte drauf was ihr da rausbekommt.
Und wieso sollte einer von uns beiden das umsetzen wollen? Damit du deine nächsten Aufgaben auch gleich gelöst hast? :evil:
eyescube hat geschrieben:und nur bash-befehle wie cat ls -l un so funktionieren? macht das überhaupt Sinn?
JA, macht Sinn, da script.py kein Programm sondern einfach nur eine Datei ist. Wenn unter Windows der Registry nicht die Einträge für ".py" Dateien gesetzt sind geht es da auch nicht. Hier hast du wiedermal bewiesen das dir die Grundlagen fehlen. Du musst es mit "python script.py" starten.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

nein weil ich die aufgabe schon gelöst hab.
-.-
ausserdem
es nervt einfach könnt den Thread schließen hab kein bock mehr auf euch so wie ihr euch aufführt.
wie die kiga´s
" du kannst das nich du bist dooof"
un du das nich du bist dooof
un du bist das das das
alter lasst euch mal einweisen ey -.-
UND DANKE woher soll ich wissn das in Linux der befehl anders is als in Windows vorallem weil ich heut früh auf WIndows os.system("test.py") sogar noch angelaufn is MAN MAN MAN eine frage schon flennen alle rum
kiga ey
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Der einzige der sich hier so auführt bist du.

Hättest du die Doku gelesen, wüsstest du das. Zumal es zum Grundwissen gehört das es unter verschiedenen Betriebsystemen verschiedene Befehle gibt und das man wenn man einen Befehl ausführen möchte dies auch einer sein muss. Ich schreib doch auch nicht im Terminal "Los mach mal".

Im übrigen wenn du die selbe Energie ins lesen und verstehen investieren würdest wie zum "rumwettern" hättest du das Problem schon lange gelöst.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

@eyescube: Ich glaube Dir nicht dass Du in PHP oder QBasic programmieren kannst. Ich kann nicht alles, das habe ich nie behauptet. Aber das aktuelle Problem -- die Pfade in einem Verzeichnis nach Dateidatum zu sortieren -- kann ich in C++, PHP, Python, vielleicht QBasic, und sicher noch einer Reihe anderer Programmiersprachen lösen.

Bei QBasic bin ich mir nicht so sicher weil die Sprache von Haus aus keine Möglichkeit bietet an die Zeitinformation zu einer Datei zu kommen. Da müsste man also mit Tricks arbeiten, wie zum Beispiel die entsprechenden DOS-Funktionen direkt aufrufen. Mit FreeBASIC, was grösstenteils rückwärtskompatibel zu QBasic ist, sollte es kein Problem sein, weil man dort auch auf externe Bibliotheken, wie beispielsweise die C-Standardbibliothek zurückgreifen kann. Die enthält sowohl eine Quicksort-Implementierung als auch Funktionen zum Ermitteln der Dateizeiten.

Warum erwartest Du von mir ein PHP-Skript was deutlich umfangreicher ist als das Problem, welches im Moment *von Dir* zu lösen ist, als Vorleistung bevor Du dich mal ernsthaft mit Python und programmieren im Allgemeinen auseinander setzt!? *Du* musst das doch am Ende können. Ich kann das schon. Auch in PHP wenn es denn unbedingt sein muss. Was IMHO nicht wirklich sein muss. :-)

Etwas in dem Umfang würde ich in dem Zeitrahmen nicht schaffen, weil ich mich in PHP erst wieder einarbeiten müsste. Und dann müsste ich mir ja erst einmal ein Projekt und einen Datenbankentwurf dazu ausdenken. Und warum sollte ich das in PHP machen wollen!? In wie fern hilft Dir das bei Deinem Problem weiter?

Dateinamen relativ zum Skript nach Dateidatum zu sortieren habe ich gerade eben mal in PHP gemacht. Musste mich da auch wieder kurz rein lesen -- und habe mit Freude festgestellt, dass man mittlerweile Callbacks nicht mehr als Name der Funktion als Zeichenketten angeben muss, sondern tatsächlich anonyme Funktionen schreiben kann. War letztendlich aber kein grosses Problem und ist vom grundsätzlichen Vorgehen her genau das selbe unter Python.

`os.system` ist wie der Name schon vermuten lässt *system*abhängig. Es wird die Shell auf dem System gestartet -- die sich auch von Linux zu Linux anders verhalten kann, je nach dem welche da konfiguriert ist -- und der wird dann die Zeichenkette zum Abarbeiten gegeben. Was Du da siehst sind die Unterschiede zwischen Windows und Linux wie Dateien gestartet werden beziehungsweise welche Dateien man überhaupt ausführen kann und welche nicht. Windows sucht im %PATH% und im aktuellen Verzeichnis und geht nach Dateiendungen und verknüpft die mit Anwendungen. Linux sucht nur im $PATH und nicht im aktuellen Verzeichnis, kümmert sich nicht um die Dateiendung, und das "executable bit" muss gesetzt sein. Aber was hat das jetzt mit dem Problem zu tun? Oder mit Python? Denn die `system()`-Funktion bei PHP verhält sich exakt genau so! Ganz einfach weil die die C-Funktion so verhält, die in beiden Fällen dahinter steht.
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

ich brauch grad das PHP-Script nich ich habs ja schon erledigt das war nur ein test ob du das auch so wie du von mir erwartest so schnell hinschreiben kannst -.-.
was das damit zu tun hat ich kanns dir sagen
es gibt ne datei die sagt
suche im Linux_client und nimm die Datei welches Datum am neuesten ist und überschreibe mit shutil die alte Datei und führe mit os.system die überschriebene Datei aus.
das is alles was ich grad will +raaaaaaaawr + mehr will ich doch garnich den rest der Befehle hab ich mir so ziemlich angeguggt was shutil macht genauso wie shutil alles machen kann wie copytree also ganze Verzeichnisse kopiern.
ich hab nur beim sortieren Probleme bei PHP nehm ich sort und hau die parameter rein un sieh an es läuft aber in Python gibts 1 von 100 Möglichkeiten es zu lösen.
Und genau DAS macht mir an Python Angst.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@eyescube
Wie jetzt, /me hat dir schon eine Musterlösung geschrieben und du kommst nicht mit dem sortieren klar?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

ich hab das noch garnid gesehn was /me geschrieben hat ausserdem ich schreib euch wie ichs in php gelöst hätte bis später -.-
BlackJack

@eyescube: Ich erwarte ja nicht von Dir das Du eine komplette Webanwendung in PHP oder Python schreibst, die gar nichts mit dem Problem zu tun hat was Du gerade lösen willst/musst, sondern eine Lösung für genau dieses Problem! Wenn Du das in PHP oder einer anderen imperativen Programmiersprache lösen kannst, dann müsstest Du das nämlich auch in Python lösen können. So unterschiedlich ist das nicht.

Bei Python gibt es genau zwei Sortierfunktionen. `sorted()` und die `sort()`-Methode auf Listen. Bei PHP gibt es deutlich mehr Sortierfunktionen und `sort()` ist bei PHP *nicht* die Funktion die Du brauchst, denn die würde eine Liste mit Dateinamen einfach alphabetisch sortieren und nicht nach Alter der Datei. Weil PHP die Datentypen "Feld" und "Wörterbuch" in einem Typ "assoziatives Array" zusammen fasst, ist dort die Auswahl an Sortierfunktionen IMHO sogar komplexer als in Python.

Wenn Du wirklich nur die neueste Datei haben möchtest, brauchst Du auch gar nicht sortieren, sondern kannst Die `max()`-Funktion mit einem entsprechenden `key`-Argument verwenden.

In dem Falle könnte ich meine PHP-Lösung auch noch mal ohne Sortieren schreiben. :-)
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

kommt drauf an es gibt in PHP mehrere sortier"arten"
sowie krsort was rückwärts sortiert ~> d,c,b,a
und ksort vorwärts
genauso wie sortieren nach Datum ne for-each schleife durchläuft
ich arbeite meistens mit arrays ansonten hab ich so viele Variablen das ich mich nicht mehr auskenne.
hm ich sollte mir mal max-function ansehn
aber heut nicht mehr heut isn scheiss Tag bin mies gelaunt hab mir 2 Nerven eingeklemmt im Schulterblatt also ich hab Grund genug schlecht drauf zu sein x)
und nein ich will das script mit den IP-Logs nicht
ich weis selber wie das geht x.x. Ich brauch auch keine PHP-Lösung bin wegen Python hier nicht wegen dem anderen Zeug ^^
BlackJack

@eyescube: Diese Sortierarten bei PHP richten sich danach, als was man ein Array verwendet -- als Array im klassischen Sinn, oder als Wörterbuch; und welche Aspekte des assoziativen Arrays man sortieren will und nach welchen Kriterien man diese Aspekte sortieren will und dann auch noch in welche Richtung man sortieren will. Für jede dieser Kombinationsmöglichkeiten scheint PHP eine *eigene* Funktion zu verwenden, wo es in Python im Grunde nur *eine* Funktion gibt. Wie die "Schlüssel" beim Sortieren berücksichtigt werden, braucht man in Python gar nicht angeben, weil dort nicht zwei unterschiedliche Datentypen in einem vermischt werden. Wenn nicht nach der "natürlichen" Ordnung sortiert werden soll, kann man eine Funktion angeben, die den Sortierschlüssel für ein gegebenes Element bestimmt. Man könnte alternativ auch eine Vergleichsfunktion übergeben, aber das `cmp`-Argument ist "deprecated". Und für ein absteigendes Sortieren gibt es das `reverse`-Argument.

Ich sehe jetzt nicht wo man beim Sortieren nach Datum eine ``foreach``-Schleife benötigt!? Man muss nur die passende Sortierfunktion mit den entsprechenden Argumenten aufrufen.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@BlackJack
cmp "deprecated" - hast du auch zufällig eine Ahnung warum? Ich fand die Funktion eigentlich immer recht praktisch.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

@Xynon1: Weil es mehr Aufwand ist als `key` und man mit `key` im Grunde alles machen kann, was mit `cmp` auch geht. Die `key`-Funktion wird für jedes Element nur einmal aufgerufen, die `cmp`-Funktion dagegen für jeden Vergleich der gemacht werden muss. Bezogen auf das hier vorliegende Problem müsste die `key`-Funktion nur einmal pro Pfad die Dateizeit ermitteln, die `cmp`-Funktion aber bei jedem Vergleich von zwei Pfadnamen und dann auch noch für beide.

Ab Python 2.7 gibt es `functools.cmp_to_key()` um eine Vergleichsfunktion in eine `key`-Funktion umzuwandeln, weil es in Python 3 das `cmp`-Argument bei den entsprechenden Funktionen nicht mehr gibt.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Und wieder etwas gelehrnt :D.
Wirft aber wieder eine andere Frage auf, wenn cmp() weg fällt in Python 3., dann fällt doch sicher auch __cmp__ weg. Reicht es dann __eq__ und __gt__ zu überladen oder müssen dann alle Vergleichsoperatoren angegeben werden. Weil bisher hatte ich immer nur rein praktikabel __cmp__ überschrieben.

Ähm, und sorry für das Thread-Hijacking. :oops:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

@Xynon1: AFAIK müssen dann alle überschrieben werden. Was ich auch ziemlich nervig finde.
deets

BlackJack hat geschrieben:
Ab Python 2.7 gibt es `functools.cmp_to_key()` um eine Vergleichsfunktion in eine `key`-Funktion umzuwandeln, weil es in Python 3 das `cmp`-Argument bei den entsprechenden Funktionen nicht mehr gibt.
Ist das denn so einfach equivalent zu kriegen? Da __cmp__ paarweise arbeitet, kann man damit ja mehr machen als mit keys. Zb. aufsteigend nach Nachnamen und absteigend nach Vornamen zu sortieren. Das geht AFAIK mit key nicht. Zumindest habe ich da mal einen Vortrag drueber gehoert, der dann halt die Stabilitaet der Sortierung nutzt, und zweimal sortiert. Was immer noch besser oder gut genug war bezueglich des Laufzeitverhaltens, da __cmp__ ja log n mehr aufgerufen wird.
BlackJack

@deets: Zumindest gibt es diese Funktion. Was die intern macht, habe ich mir nicht angeschaut.

Ansonsten müsste doch so etwas hier funktionieren (ungetestet):

Code: Alles auswählen

class CmpInverter(object):
    def __init__(self, value):
        self.value = value
    
    def __cmp__(self, other):
        return cmp(other.value, self.value)


def key_func(person):
    return (person.surname, CmpInverter(person.name))
Und wenn man den Sortierschlüssel oder zumindest den Teil auf eine numerischen Wert reduzieren kann, dann reicht ein einfaches unäres ``-`` aus.
deets

@BlackJack

Netter Trick! Ist natuerlich __cmp__ durch die Hintertuer ;) Denn damit wird ja wieder fuer jeden Vergleich ein call gemacht. Aber so muesste es gehen, und das kannst du sogar verallgemeinern, indem du nur noch Comparer-Objekte als Keys hast.
BlackJack

@deets: Ein Aufruf pro Vergleich wird immer gemacht. Auch wenn da bei `key_func()` nur ``return person.surname`` stünde, wird für jeden Vergleich die `__cmp__`-Methode von diesen Zeichenketten aufgerufen und da natürlich auch ingesamt O(log n) solcher Aufrufe beim Sortieren.
Antworten