Dateien verschieben?

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
hansen12345
User
Beiträge: 7
Registriert: Montag 23. Januar 2006, 19:56

hallo,
frage:
ich habe einen ordner, in dem .txt dateien gespeichert sind.
python soll nur den ordner durchsuchen und wenn es .txt dateien finden dann sollen diese in einen neuen ordner mit dem namen "dokumete txt" verschoben werden, den python auch erstellt hat.

bin erst seit ca. einer woche im club python,
also bitte eine antwort das sie auch ein newbie versteht.

danke
flo
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

http://docs.python.org/lib/module-shutil.html

Da gibts eine Funktion move. Das suchst du :wink:
TUFKAB – the user formerly known as blackbird
hansen12345
User
Beiträge: 7
Registriert: Montag 23. Januar 2006, 19:56

danke für die antwort,

"aber das ist nur die halbe miete":
ich will ja das NUR dateien in deren name .txt vorkommt verschieben.

z.b.:
ein ordner mit verschiedenen dateien(jpg, mp3, txt usw.).
python soll nun den ordner mit den verschiedenen dateien durchsuchen und NUR die dateien wo .txt im Dateinamen vorkommt in einen neuen ordner verschieben.

bitte um rat
gruß
flo
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Guck Dir os.listdir() in Kombination mit fnmatch.fnmatch() an. Wie ich auch schon im IRC sagte. ;-)

Alles auf der Python-Homepage dokumentiert, und beide Teil der stdlib.

--- Heiko.
hansen12345
User
Beiträge: 7
Registriert: Montag 23. Januar 2006, 19:56

komme nicht weiter bin echt am verzweifeln,
bin anfänger und deswegen verstehe ich das mit den zwei "module kombinieren" noch nicht ,
aber ich habs mal versucht siehe beispiel :-(

wie schaffe ich es jetzt die datei wo .txt im namen vorkommt zu verschieben?

Code: Alles auswählen

from fnmatch import*
from os import*
from findertools import*
a=listdir("D:\\1")  #listet den ordner mit den verschidenen dateien.
b=fnmatch("%s" % (a), "*.txt*")  #wenn in "a" .txt vorkommt kommt True
if b==True:
    move(?????, ordner2)
bitte um hilfe
flo
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

from fnmatch import fnmatch
import os
from findertools import*
filelist = listdir('/home/myfolder')
for fn in filelist:
    b = fnmatch(fn, '*.txt')  #wenn in "a" .txt vorkommt kommt True
    if b:
        move(fn, '/home/textfiles')
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

Ich verwende zum Auflisten von Dateien eines Ordners auch gerne *glob*.
Das sieht dann so aus:

Code: Alles auswählen

from glob import glob
for filenames in glob("/home/gerold/*.txt"):
    print filenames
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
hansen12345
User
Beiträge: 7
Registriert: Montag 23. Januar 2006, 19:56

vielen dank für eure antworten:

natürlich sind beide möglichkeiten gut,
aber der code von >gerold ist für mich leichter zu verstehen und auch kürzer.

aber nochmal danke für eure unterstützung
gruß
flo
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Wobei Du aber bedenken musst dass glob() nicht überall das macht was Du willst... Siehe hierzu die Beschreibung von glob in der Python-Dokumentation.

fnmatch macht immer das was Du willst.

--- Heiko.
hansen12345
User
Beiträge: 7
Registriert: Montag 23. Januar 2006, 19:56

@modelnine
wie wurde dan fnmatch in meinem beispiel als code ausehen?

gruß
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

modelnine hat geschrieben:Wobei Du aber bedenken musst dass glob() nicht überall das macht was Du willst...
Hi Heiko!

Auf was spielst du an? Ich finde nichts negatives in der Doku. Man könnte evt. die Tatsache, dass auch kaputte Symlinks aufgelistet werden, als negativ bewerten. Aber wenn ich davon weiß, dann kann ich ja immer noch einen Fehler abfangen oder vorher prüfen ob die Datei auch wirklich existiert, bevor ich sie verschiebe.
http://python.org/doc/2.4.2/lib/module-glob.html

Ein mögliches Einsatzszenario für "glob": Mit "glob" ist es ziemlich einfach, Logfiles in Benutzerordnern aufzulisten um diese danach auswerten zu können.

Code: Alles auswählen

logfiles = glob.glob("/home/*/log/*.log")
if logfiles:
    for logfilename in logfiles:
        if os.path.isfile(logfilename):
            f = file(logfilename, "rU")
            for linenumber, line in enumerate(f):
                if line:
                    if line.upper().find("ERROR") > -1:
                        print "ERROR in file '%s' in line %s:" % (logfilename, linenumber + 1)
                        ...
else:
    print "no logfiles found"
Ja, in Linux würde ich das mit "find" und "grep" machen. ;-) Aber hier geht es ja um Python.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten