[Python] Pfad verursacht EOL-error

Nimroy

Grünschnabel
hi.

habe hier ien Python-Skript welches einen Hotfolder überwachen und Dateien verschieben soll. Offline. Leider verursacht der Slash nach hotfolder einen "EOL while scanning..." Error. Ohne funktioniert es aber nicht. hat jemand einen Lösungsansatz dafür? Hier der Code

Code:
import os 
import time 

"""der einfachheit halber gehe ich davon aus dass die dateien immer nr_lala.jpg benannt werden 
also immer ein unterstrich nach der nr.""" 

#hotfolder 
directory = "c:\hotfolder\" 

#wo liegen die nummer-ordner 
directory2 = "d:\" 

while 1: 
    for i in os.listdir(directory): 
        #dateien gefunden, gucken ob verschiebbar 
        if os.path.exists( directory2+i.split("_")[0] ): 
            #datei verschieben 
            os.system("move  "+i+" "+directory2+i.split("_")[0]) 
    #20 sek schlafen 
    time.sleep(20)

Herzlichen Dank im voraus,
Nimroy

P.S. Wenn das jemand in Perl umschreiben kann, nehm ich auch Perl.
 
Hallo!

Versuchs doch mal hiermit:

Code:
import os,time;

srcDir = 'c:/test/watchDir/'
destDir = 'c:/test/destDir/'
lastTime = 0
tmpTime = 0
while 1:
    for f in os.listdir(srcDir):
        print f,
        srcFile = open(srcDir + '/' + f,'r')
        destFile = open(destDir + '/' + f,'w')
        destFile.write(srcFile.read())
        destFile.flush()
        destFile.close()
        srcFile.close()
    time.sleep(10)
    print "sleep ended - looking for new files..."

Du musst nun natürlich noch schauen, was mit den schon verschobenen Files passieren soll, sprich sollen sie aus dem srcDir gelöscht werden under werden die Dateinamen in einer Liste vermerkt, so dass sie beim nächsten Durchlauf nicht mehr berücksichtigt werden etc...

Gruß Tom
 
Die Files sollen verschoben werden, also aus dem Quellverzeichnis gelöscht werden. Wie sieht das dann aus?
 
Hallo!

Veruschs mal damit:

Code:
import os,time;

srcDir = 'c:/test/watchDir'
destDir = 'c:/test/destDir'
lastTime = 0
tmpTime = 0
maxTime = 0
while 1:
    for f in os.listdir(srcDir):
        fileSrcPath = srcDir + '/' + f
        fileDestPath = destDir + '/' + f
        tmpTime = os.path.getctime(fileSrcPath)
        print f,
        if tmpTime > maxTime:
            srcFile = open(fileSrcPath,'r')
            destFile = open(fileDestPath,'w')
            destFile.write(srcFile.read())
            destFile.flush()
            destFile.close()
            srcFile.close()
            os.remove(fileSrcPath)
        if tmpTime > lastTime:
            lastTime = tmpTime
    time.sleep(10)
    print "sleep ended - looking for new files..."
    maxTime = lastTime

Gruß Tom
 
kommt das bei raus:

Traceback (most recent call last):
File "C:/Python23/hotfolder2.py", line 15, in -toplevel-
srcFile = open(fileSrcPath,'r')
IOError: [Errno 13] Permission denied: 'c:/hotfolder//Neuer Ordner

Es gibt übrigens für das verschieben ein Kriterium, von dem ich dachte es sei aus dem ersten skript ersichtlich. Für eine datei Nummer_blabla.jpg gibt es im Ziel einen Ordner Nummer_irgendwas. und dieser Ordner kann direkt in der ersten ebene oder aber auch in der dritten oder vierten ebene stehen. Aber da soll die Datei hin.

Aber erst einmal ein hertliches danke. Bin halt in Python total unerfahren.
 
Hallo!

Traceback (most recent call last):
File "C:/Python23/hotfolder2.py", line 15, in -toplevel-
srcFile = open(fileSrcPath,'r')
IOError: [Errno 13] Permission denied: 'c:/hotfolder//Neuer Ordner

Bei mir funktioniert das... hast du denn Code vielleicht abgeändert und versuchst ein Verzeichniss lesend zu öffnen? Dabei bekam ich eben diese Meldung...


Für eine datei Nummer_blabla.jpg gibt es im Ziel einen Ordner Nummer_irgendwas. und dieser Ordner kann direkt in der ersten ebene oder aber auch in der dritten oder vierten ebene stehen. Aber da soll die Datei hin.

D.h. die Datei : 4711_blablub.jpg soll in das Zielverzeichniss
...\4711_irgendwas als 4711_blablub.jpg abgelegt werden?
Kann es dort auch Mehrdeutigkeiten geben?
Oder gibt es beispielsweise immer nur ein Verzeichnis mit dem Präfix 4711 ?

Gruß Tom
 
Mehrdeutigeiten sind nicht gegeben.

und arbeitest du auf Linux oder Windows, so wie ich?
habe lediglich das Verzeichnis auf c:hotfolder und das Ziel auf d:ziel geändert.
 
Hallo!

Here we are!

Code:
import os, re, time;

def findDir (basedir, num):
    for dirs in os.walk(basedir,topdown=False):
        filePath = dirs[0].replace('\\','/')  # Die Boardsoftware macht aus den beiden \ \ einen \ also Vorsicht!
        lastPart = filePath[filePath.rfind('/')+1:]
        if re.search(num + '_.*',lastPart):
            return dirs[0]
    return 'no_dir'

srcDir = 'c:\\test\\watchDir'
destDir = 'c:\\test\\destDir'
lastTime = 0
tmpTime = 0
maxTime = 0
while True:
    for f in os.listdir(srcDir):
        fileSrcPath = srcDir + '\\' + f    # hier  \ \
        print f
        fileDestPath = findDir(destDir,f.split('_')[0])+ '\\' + f # hier \ \
        tmpTime = os.path.getctime(fileSrcPath)
        if tmpTime > maxTime:
            srcFile = open(fileSrcPath,'r')
            destFile = open(fileDestPath,'w')
            destFile.write(srcFile.read())
            destFile.flush()
            destFile.close()
            srcFile.close()
            os.remove(fileSrcPath)
        if tmpTime > lastTime:
            lastTime = tmpTime
    time.sleep(10)
    print "sleep ended - looking for new files..."
    maxTime = lastTime

Verzeichnissstruktur:

Code:
C:\TEST
????destDir
?   ????110_dir
?       ????112_dir
?           ????4711_dir
????watchDir

In watchDir sind die drei Dateien:

Code:
04.08.2004  16:32                    6 110_taxi.png
04.08.2004  16:32                    6 112_bus.png
04.08.2004  16:32                    6 4711_train.png

abgelegt.

Diese werden dann in ihre Korrespondieren Verzeichnisse verschoben ...

110_taxi.png -> c:\test\destDir\110_dir
112_bus.png -> c:\test\110_dir\112_dir
4711_train.png -> c:\test\110_dir\112_dir\4711_dir

HTH

Gruß Tom
 
Moin Tom.

Mensch, du machst dir ja mühe. Klasse. Echt. Da soll mal einer sagen, Computer - und Programmier-cracks seien unsoziale Freaks, die den ganzen Tag vorm Rechner verbringen.

Hab das Skript gleich mal ausprobiert. Bekomme aber in Zeile 5 (filepath = ....) wieder dieses "EOL while scanning single-quoted..." gedöns. Was ist das zur Hölle? Warum scheint das bei dir zu gehen, und bei mir nicht?

Gruß,
Nimroy
 
Hallo!

Hast du auch die "Warnungen" beachtet die ich angegeben habe?
In der Zeile in der du eine Raute (#) findest musst du doppel Backslashes verwenden (ohne Leerzeichen zwischendrin.) Vielleicht ist das ja der Fehler ...

//EDIT:

MOMENT! Die Boardsoftware tauscht anscheinend auch Befehle im Text aus ...
concat verwende ich gar nicht, da sollte eigentlich open stehen ...

Gruß Tom
 

Neue Beiträge

Zurück