Seite 1 von 1

FTP Datenverwaltung

Verfasst: Mittwoch 28. Juli 2021, 10:20
von N.Forkel
Hallo habe bisher nur Kleinigkeiten mit Python realisieren können, da ich mir diese Sprache selbst aneigne. Ich habe aktuell ein Projekt am rumbasteln. Es geht um den Zugriff auf einen FTP-Server. Dort werden regelmäßig Daten abgelegt. Mein Plan ist einen schon integrierten Raspberry Pi herzunehmen und mit crontab einmal die Woche dieses Skript auszuführen. Die Verbindung habe ich schon in dem Skript programmiert und funktioniert auch. Jetzt ist die Frage mit welchem Befehl ich einen vollen Ordner löschen kann. Hab zwar einen Befehl gefunden, aber dieser geht nur wenn der Ordner leer ist. Würde mich über ein bisschen Hilfe freuen. Danke.

Re: FTP Datenverwaltung

Verfasst: Mittwoch 28. Juli 2021, 12:11
von sparrow
Wie gehst du denn im Augenblick vor? Es gibt verschiedenste Bibliotheken, die das Verwenden einen FTP-Verbindung abstrahieren.

Wenn du es "roh" macht: Du musst den Inhalt löschen und anschließend mit rmdir ebenfalls das Verzeichnis.

Re: FTP Datenverwaltung

Verfasst: Mittwoch 28. Juli 2021, 13:44
von Sirius3
FTP kennt keinen Befehl, um ganze Verzeichnisbäume zu löschen, das mußt Du selbst machen, indem Du alle Dateien löschst und danach das leere Verzeichnis.

Re: FTP Datenverwaltung

Verfasst: Mittwoch 28. Juli 2021, 18:46
von N.Forkel
Sirius3 hat geschrieben: Mittwoch 28. Juli 2021, 13:44 FTP kennt keinen Befehl, um ganze Verzeichnisbäume zu löschen, das mußt Du selbst machen, indem Du alle Dateien löschst und danach das leere Verzeichnis.

Ja ok mein Problem besteht bloß darin, das eine IP-Cam ihre Alarmbilder dort abspeichert und die Dateien und Ordner zu diesen immer anders benannt sind. Das macht das ganze etwas schwierig automatisiert zu löschen

Re: FTP Datenverwaltung

Verfasst: Mittwoch 28. Juli 2021, 18:46
von N.Forkel
sparrow hat geschrieben: Mittwoch 28. Juli 2021, 12:11 Wie gehst du denn im Augenblick vor? Es gibt verschiedenste Bibliotheken, die das Verwenden einen FTP-Verbindung abstrahieren.

Wenn du es "roh" macht: Du musst den Inhalt löschen und anschließend mit rmdir ebenfalls das Verzeichnis.
Hab mit ftplib angefangen

Re: FTP Datenverwaltung

Verfasst: Donnerstag 5. August 2021, 12:02
von AlexL
Wenn ich es richtig verstanden habe, möchtest du einmal in der Woche einen Ordner löschen. Das kannst du doch direkt mit der crontab machen. Einfach

@weekly rm -r /pfad-zum-ordner/ordnername

in die crontab eintragen.

Re: FTP Datenverwaltung

Verfasst: Donnerstag 5. August 2021, 13:32
von __blackjack__
@AlexL: Dazu müsste entsprechender Zugriff auf den Server bestehen. Vermute mal den gibt es nicht.

Re: FTP Datenverwaltung

Verfasst: Donnerstag 5. August 2021, 16:02
von AlexL
Ich habe mal Folgendes probiert:

Code: Alles auswählen

from ftplib import FTP

ftp = FTP('server.domain')
ftp.login(user='ich', passwd = 'geheim')

ftp.cwd('verzeichnisname')
ftp.retrlines('LIST')
 
stdout = ftp.nlst()

anzahl=len(stdout)

# Kann auskommentiert werden
# nur für Konsolenausgabe
print(anzahl)

i=0
while i <= anzahl-1:
    var=stdout[i]
    i = i + 1
    ftp.delete(var)

ftp.close()
Es löscht alle Dateien die direkt im Verzeichnis liegen - aber keine in Unterverzeichnissen (also nicht rekursiv). Da es sich nur um Bilddateien handelt, die automatisch ins Verzeichnis kopiert werden, sollte das auch genügen.

Getestet habe ich den Code. Allerdings bin ich auch nur Anfänger.
Vlt können die Profis noch paar Tipps zu möglichen Fehlerbehandlungen, etc. geben.

P.S. ftp.retrlines('LIST') kann auch auskommentiert werden.

Re: FTP Datenverwaltung

Verfasst: Donnerstag 5. August 2021, 16:35
von Sirius3
Warum nennst Du die Liste von Dateinamen stdout? `var` ist für einen Dateinamen auch kein guter Name. Und die while-Schleife ist eine sehr umständlich geschriebene for-Schleife:

Code: Alles auswählen

from ftplib import FTP

ftp = FTP('server.domain')
ftp.login(user='ich', passwd = 'geheim')

ftp.cwd('verzeichnisname')

filenames =  ftp.nlst()
for filename in filenames:
    ftp.delete(filename)

ftp.close()

Re: FTP Datenverwaltung

Verfasst: Donnerstag 5. August 2021, 18:13
von AlexL
Sirius3 hat geschrieben: Donnerstag 5. August 2021, 16:35 Warum nennst Du die Liste von Dateinamen stdout? `var` ist für einen Dateinamen auch kein guter Name. Und die while-Schleife ist eine sehr umständlich geschriebene for-Schleife:
Das mit stdout hatte ich aus einem Beispiel zu Paramiko in Erinnerung. Die Variablenbenennung war mir erst mal nicht sooo wichtig. Ich wollte erst mal herausfinden, wie sich das Problem im Ansatz lösen lässt.
Also mit der For-Schleifen-Syntax von Python habe ich mich noch nicht anfreunden können. Dieses "As" bringt mich gedanklich immer ins Stolpern. C++ und Co. sind in dieser Hinsicht wirklich schöner.
Aber danke für die Hinwise.

Re: FTP Datenverwaltung

Verfasst: Donnerstag 5. August 2021, 18:16
von __deets__
Da in den for-schleifen kein as vorkommt, ist die Verwirrung wohl recht umfänglich.

Und

for(auto& item : things)

in C++ vs Pythons

for item in things

finde ich jetzt nicht einen bemerkenswerten Unterschied.

Re: FTP Datenverwaltung

Verfasst: Donnerstag 5. August 2021, 18:58
von AlexL
__deets__ hat geschrieben: Donnerstag 5. August 2021, 18:16 Da in den for-schleifen kein as vorkommt, ist die Verwirrung wohl recht umfänglich.

Und

for(auto& item : things)

in C++ vs Pythons

for item in things

finde ich jetzt nicht einen bemerkenswerten Unterschied.
Ja, da hast du schon recht.
An das (technische)
for(int i ; i<k ; i++)
{
...
...
}

habe ich mich über die Jahre gewöhnt.

Irgendwann gewöhne ich mich auch an das "literarische" for item in things. :wink:

Re: FTP Datenverwaltung

Verfasst: Freitag 6. August 2021, 11:48
von __deets__
Da sind aber noch groessere Unterschiede - vor allem erlaubt die iterative Form auch ueber nicht-wahlfrei-addressierbare Daten zu laufen. In Python (und auch in C++ mit den entsprechenden iterierbaren Objekten) kannst du

Code: Alles auswählen

for zeile in riesen_datei_die_niemals_in_den_speicher_passt:
    ...
machen. Mit deinem rum-geindexe kommst du da nicht weit. Und es ist immer eine gute Idee, sich bei der Programmierung auf den minimal notwendigen "Vertrag" zu stuetzen. Denn damit wird er flexibler, wenn es mal etwas anderes zu iterieren gibt, zB Dinge, die dann aus einer Datenbank oder aenhlichem einzeln abgeholt werden.

Re: FTP Datenverwaltung

Verfasst: Freitag 6. August 2021, 19:59
von AlexL
__deets__ hat geschrieben: Freitag 6. August 2021, 11:48 Mit deinem rum-geindexe kommst du da nicht weit. Und es ist immer eine gute Idee, sich bei der Programmierung auf den minimal notwendigen "Vertrag" zu stuetzen. Denn damit wird er flexibler, wenn es mal etwas anderes zu iterieren gibt,
Oh, ja. Viele relativ moderne Konzepte (Iterieren ist ja auch schon alt geworden) sind an mir vorbei gerauscht und ich habe mich nicht darum gekümmert - wie z.B. Lambda-Funktionen.

Danke für deinen Hinweis. Ich werde mich mal diesbezüglich belesen und bisschen rumprobieren.

Re: FTP Datenverwaltung

Verfasst: Sonntag 8. August 2021, 01:16
von N.Forkel
Danke euch Habs mittlerweile halbwegs hinbekommen. Bin erst in alle Ordner reingesprungen und in die unterordner bis zu den Bildern hab da alles aufgelistet und alle gelöscht. Dann bin ich wieder ein Verzeichnis zurück hab da den Ordner gelöscht. Dann wieder zurück und wieder aufgelistet und alle Ordner gelöscht. War zwar umständlich von der Programmierung her aber funktioniert so wie ichs mir gedacht habe.