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

Hallo,
ich hab nun einige Sachen ausprobiert aber ich bekomm ständig Fehler.
ich möchte gern in einen Ordner wechseln sehen was die neueste Datei ist und die neueste Datei soll die alte überschreiben.

Code: Alles auswählen

import os
os.chdir("../Linux_Client")
file=open("test.txt","w")
file.write("12345")
file.close()
wie gesagt das war nur ein Test ich bin eig PHP entwickler deswegen ../ muss ich denn bei sowas den Pfad angeben? was is wenn ich das einfach nur suchen will (den Ordner) und dann sagen will gefunden? ok öffnen.
Hoffe jemand kann mir da mal kurz aufklären in der Doku hab ich nix gefunden btw bin irgendwie Blind
BlackJack

@eyescube: Was für Sachen hast Du ausprobiert und welche Fehler bekommst Du? Wenn Du das nicht konkreter angibst, kann man dazu auch nicht viel sagen.

In einen Ordner wechseln möchtest Du eher nicht, weil `os.chdir()` das Arbeitsverzeichnis für das gesamte Programm verändert. Damit änderst Du einen globalen Zustand, mit dem andere Teile des Programms vielleicht nicht rechnen. Es ist robuster einfach mit relativen oder absoluten Pfaden zu arbeiten und nicht das Arbeitsverzeichnis zu wechseln.

Die Namen in einem Verzeichnis bekommt man mit `os.listdir()`. Die Metadaten, wie Zeitstempel gibt's mit `os.stat()`. Und um das Minimum von etwas zu ermitteln gibt es die `min()`-Funktion -- in diesem Fall im Zusammenhang mit dem `key`-Argument dieser Funktion.

Der Zusammenhang von PHP und '../' ist mir jetzt nicht so ganz klar!?

Gibt es bei dem Test denn ein Verzeichnis mit dem Namen `Linux_Client`, das über dem Arbeitsverzeichnis des Prozesses liegt? Kommt da ein Fehler? Wenn ja welcher?

Wenn Du ein Verzeichnis suchen willst, dann musst Du danach suchen. Klingt komisch. Ist aber so. Dazu könntest Du Dir die `os.walk()`-Funktion anschauen.

Was verstehst Du unter "öffnen" eines *Verzeichnisses*!?
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

zum Beispiel hab ichs so versucht

Code: Alles auswählen

import os, sys
os.walk("Linux_Client")
file=open("hello.txt","r")
file.close
print file
ausgabe
python ordnersuchen.py
Traceback (most recent call last):
File "ordnersuchen.py", line 3, in <module>
file=open("hello.txt","r")
IOError: [Errno 2] No such file or directory: 'hello.txt'

na bei PHP gib ich einfach ein spring /datei/ dahin
oder übergeordnet ../datei/
Die Datei hello.txt steht im Order Linux_Client. irgendwie komm ich mit Ordnern einfach net zurecht.
os.walk os.path schon versucht.
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

ah hab nun was gefunden und zwar:
import os

datei = "test.txt"
verzeichnis = "Linux_client"

pfad = verzeichnis + os.sep + datei
if os.path.exists(verzeichnis):

jetz muss ich nur das ändern mit wähle neueste Datei und überschreibe diese alte Datei ^^
Rekrul
User
Beiträge: 78
Registriert: Dienstag 7. Dezember 2010, 16:23

Schau dir mal os.path.join an.

Code: Alles auswählen

os.path.join(verzeichnis , datei)
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

ich hab das gefunden
import os

datei = "test.txt"
verzeichnis = "test"

pfad = verzeichnis + os.sep + datei
if not os.path.exists(verzeichnis):
os.mkdir(verzeichnis)
offen = open(pfad, "w")
offen.write("hallo")
offen.close()

das verzeichnis ist in dem Ordner wo das Script abgelegt wird.
sprich der könnte auf einma wo anders liegen also darf ich keinen festen Verzeichnis-Pfad verwenden
BlackJack

@eyescube: Du solltest Dir vielleicht mal die Dokumentation inklusive Beispielen zu den Funktionen anschauen, die Du verwendest. `os.walk()` einfach so aufzurufen und dann nichts mit dem Ergebnis zu machen, bringt überhaupt nichts. Und wenn das Verzeichnis `Linux_Client` nicht im aktuellen Arbeitsverzeichnis liegt, dann wird man das bei `os.walk()` auch nicht so angeben können. Wenn man das könnte, dann bräuchte man es ja nicht suchen.
eyescube hat geschrieben:na bei PHP gib ich einfach ein spring /datei/ dahin
oder übergeordnet ../datei/
Könntest Du den Satz vielleicht noch einmal mit Grammatik und verständlich formulieren?

Wenn das Verzeichnis relativ zum Skript abgelegt ist, dann kannst Du über die Pfadangabe des Moduls dorthin gelangen. Die ist in jedem Python-Modul an den Namen `__file__` gebunden. Da kannst Du den Verzeichnisteil mit `os.path.basename()` von ermitteln.
eyescube
User
Beiträge: 56
Registriert: Mittwoch 6. April 2011, 06:58

ich hab nun einfach die Teile genommn und zusammengefügt.
import os
import shutil
datei = "test.txt"
verzeichnis = "Linux_Client"

pfad = verzeichnis + os.sep + datei
if os.path.exists(verzeichnis):
shutil.copyfile("test.txt","hallo.txt")


hab nun 2 Dateien in den Ordner gepackt und kommt folgender Fehler:
python ordnersuchen.py
Traceback (most recent call last):
File "ordnersuchen.py", line 8, in <module>
shutil.copyfile("test.txt","hallo.txt")
File "/usr/lib/python2.6/shutil.py", line 52, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: 'test.txt'
obwohl im Pfad die Datei test.txt und hallo.txt existieren.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Es bringt nichts zu prüfen ob ein irgendein Verzeichnis da ist, um dann doch im aktuellen die Dateien zu suchen. :) Du musst schon deinen erstellten Pfad angeben und nicht "test.txt". Zudem wurde dir schon gesagt das du statt "+", "os.path.join" für das verbinden von Pfaden nehmen solltest.
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

ahhh Cool Danke aber warum brauch ich für shutil immer einen festen Pfad?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

AFAIK kannst du auch jederzeit den Pfad nochmal mit der "os.path.relpath()" aufrufen, dann erhälts du einen relativen Pfad.
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

da bekomm ich ärger mit IO
python ordnersuchen.py
Traceback (most recent call last):
File "ordnersuchen.py", line 9, in <module>
shutil.copyfile(full,"hallo.txt")
File "/usr/lib/python2.6/shutil.py", line 52, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: '../Linux_Client'

ah ne jetz gehts danke :)
Bin euch echt dankbar +freu+ :)
un nun eine letzte frage
wie bekomm ich raus welche datei die neueste in dem Ordner Linux_Client ist?
Zuletzt geändert von eyescube am Montag 11. April 2011, 10:20, insgesamt 1-mal geändert.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Was hast du denn geschrieben, deinem Beispiel oben zu folge müsste es etwa so heißen:

Code: Alles auswählen

import os
import shutil
datei = "test.txt"
verzeichnis = "Linux_Client"

pfad = os.path.relpath(os.path.join(verzeichnis, datei))
if os.path.exists(verzeichnis):
    shutil.copyfile(pfad, "hallo.txt")
"hallo.txt" wird so aber noch in dein Verzeichnis in dem das Script liegt kopiert.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

eyecube hat geschrieben:wie bekomm ich raus welche datei die neueste in dem Ordner Linux_Client ist?
Mit os.path - getatime, getctime, getmtime
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

@eyescube: Was ist ein "fester Pfad"? Du fragst nicht ernsthaft warum man den Pfad angeben muss, den man auch meint, statt einfach einen Dateinamen anzugeben und das Programm wird dann schon suchen wo im Dateisystem der wohl sein könnte? Und was ist wenn es den mehr als einmal gibt?

@Xynon1: Ist ja schön dass das geht, aber was soll das? Welchen Vorteil hat es daraus eine relative Pfadangabe zu machen? Und wie schlau ist es jemandem der einfach alles übernimmt ohne darüber nachzudenken oder es zu verstehen auch noch eine unnötig kompliziertere Lösung zu zeigen. :twisted:

Eyescube wird hier wohl solange dumm weiter betteln bis eine Komplettlösung da ist.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@BlackJack
Der einzige Vorteil den ich in relativen Pfadenangaben sehe, ist eigentlich nur wenn man in einem eventuellen Stacktrace nicht alle Pfade offen sichtbar machen möchte. Was den zweiten Teil angeht hast du natürlich vollkommen recht. :roll:
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

quatsch bevor er das hinschrieb hab ich das Problem schon gelöst gehabt.
Nur was bringt mir der feste Pfad wenn ich auf ner 2-3-4 Festplatte das script un das ganze wo anders ableg?
das war damit gemeint
ausserdem versuch ichs eh selber und ich denke n Forum is dazu da wenn man n Brett vorm Kopf hat nachzufragen
ich bin PHP-Entwickler ich tu mich halt schwer mit Python und lernen will ichs trotzdem. -.-
Warum will das keiner verstehn?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

eyecube hat geschrieben:Nur was bringt mir der feste Pfad wenn ich auf ner 2-3-4 Festplatte das script un das ganze wo anders ableg?
Exakt das selbe wie der absolute Pfad nur halt "maskiert".
eyecube hat geschrieben:ich bin PHP-Entwickler ich tu mich halt schwer mit Python und lernen will ichs trotzdem. -.-
Wo soll denn bei Pfaden in PHP eigentlich der Unterschied zu Python sein ?
Abgesehen davon das Python mehr und schönere Methoden zum bearbeiten von Pfaden hat, sollte selbst die __file__-Variable nicht fremd sein, PHP hat ja auch __FILE__ in jedem Script definiert.
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

Naja ich hab jetz auch kein bock hier mich dauernd zu rechtfertigen.
Danke für deine Doku umsetzen lässt sichs auch net bin weg bis die Tage -.-
BlackJack

@eyescube: Ein Forum ist dazu da nachzufragen, aber Du musst die Antworten dann schon verstehen und umsetzen. Ein Forum ist nicht dazu da ständig nur fertige Quelltextschnippsel zu liefern, die man ohne drüber nachzudenken in das aus eben solchen Quelltextschnippseln bestehende Programm rein zu kopieren.

Du kannst halt einfach nicht programmieren und zeigst auch Null Interesse es zu lernen. Du schreibst unverständliche Beiträge. Zeigst teils gruseligen Quelltext und gehst nicht ein Stück auf Verbesserungsvorschläge ein. Wenn man Die Funktionen nennt, mit denen Du das Problem angehen kannst, dann rufst Du die einfach irgendwie auf und sagst "geht nicht", wobei man deutlich sieht dass Du Dich mit der Funktion und deren Dokumentation gar nicht beschäftigt hast. Wo soll denn da die Motivation herkommen Dir zu programmieren lernen zu helfen!?
Antworten