# [Python] Pfad verursacht EOL-error



## Nimroy (4. August 2004)

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


```
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.


----------



## Thomas Darimont (4. August 2004)

Hallo!

Versuchs doch mal hiermit:


```
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


----------



## Nimroy (4. August 2004)

Die Files sollen verschoben werden, also aus dem Quellverzeichnis gelöscht werden. Wie sieht das dann aus?


----------



## Thomas Darimont (4. August 2004)

Hallo!

Veruschs mal damit:


```
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


----------



## Nimroy (4. August 2004)

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.


----------



## Thomas Darimont (4. August 2004)

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


----------



## Nimroy (4. August 2004)

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.


----------



## Thomas Darimont (4. August 2004)

Hallo!

Here we are!


```
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:


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

In watchDir  sind die drei Dateien:


```
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


----------



## Nimroy (5. August 2004)

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


----------



## Thomas Darimont (5. August 2004)

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


----------



## Thomas Darimont (5. August 2004)

*Hier mal eine Funktionierende Linux Version:*

Gruß Tom

Ps: EOL while scanning single-quoted..." 

kommt auch dann vor, wenn ein String mit ' eingeleitet aber mit " beendet wurde...


----------



## Nimroy (5. August 2004)

Wo sollte open statt contact stehen? Bei mir kommt kein contact im Source vor.


----------



## Thomas Darimont (5. August 2004)

> tmpTime = os.path.getctime(fileSrcPath)
> if tmpTime > maxTime:
> srcFile = concat(fileSrcPath,'r')
> destFile = concat(fileDestPath,'w')
> destFile.write(srcFile.read())



o p e n ( ... ) wurde von der Forumssoftware  durch concat(...) ersetzt ...
im Zip File findest du die "richtige" Lösung.

Gruß Tom


----------



## Nimroy (5. August 2004)

Witzig. an der Stelle steht bei mir überhaupt kein contact.







Wo liegt der Unterschied zwischen der Linux und der Windowsvariante?


----------

