Seite 1 von 1

Dateien verschieben?

Verfasst: Montag 23. Januar 2006, 20:18
von hansen12345
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

Verfasst: Montag 23. Januar 2006, 20:41
von mitsuhiko
http://docs.python.org/lib/module-shutil.html

Da gibts eine Funktion move. Das suchst du :wink:

Verfasst: Dienstag 24. Januar 2006, 00:26
von hansen12345
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

Verfasst: Dienstag 24. Januar 2006, 00:29
von modelnine
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.

Verfasst: Dienstag 24. Januar 2006, 01:44
von hansen12345
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

Verfasst: Dienstag 24. Januar 2006, 05:06
von mitsuhiko

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')

Verfasst: Dienstag 24. Januar 2006, 08:32
von gerold
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
:-)

Verfasst: Dienstag 24. Januar 2006, 18:36
von hansen12345
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

Verfasst: Dienstag 24. Januar 2006, 18:37
von modelnine
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.

Verfasst: Dienstag 24. Januar 2006, 20:31
von hansen12345
@modelnine
wie wurde dan fnmatch in meinem beispiel als code ausehen?

gruß

Verfasst: Dienstag 24. Januar 2006, 20:57
von gerold
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
:-)