Datei suchen, wenn vorhanden dann löschen

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.
mazdafox
User
Beiträge: 13
Registriert: Mittwoch 20. Juni 2007, 08:32

ja das problem hab ich jetzt uach mit der datenbank wie darüber beschrieben!

und er schreibt mir bei

Code: Alles auswählen

if os.path.isdir("C:\\tin_temp"):os.rmdirs("C:\\tin_temp")
directory is not empty!

und läst sie mih nicht löschen!
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

mazdafox hat geschrieben:

Code: Alles auswählen

if os.path.isfile("Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Route_Dissolve.shp"):    # falls Dabei existiert 
    os.remove("Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Route_Dissolve.shp")
Ein solcher Aufruf kann nur funktionieren wenn die Datei unter deinem Current Work Directory ( os.getcwd() ) liegt.
Wenn das auch im Tempverzeichnis "c:/TIN_Temp" liegt muss du das auch absolut angeben werden.
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

mazdafox hat geschrieben:ok danke ich weiß ich nerve aber was mache ich wenn die datei nicht vorhanden ist? weil ich möchte ja sie löschen nur wenn sie vorhanden ist!!

danke
Du machst gar nichts. Wenn sie vorhanden ist, wird sie gelöscht. Wenn sie nicht vorhanden ist, dann wird sie vollautomatisch nicht gelöscht. Genauso wie Kaffee, der nicht in meiner Tasse ist auch automatisch nicht daraus getrunken wird, weil er einfach nicht da ist, selbst wenn ich versuche zu trinken.

Das erste Beispiel mit try und except war nahezu perfekt. Im except-Block hätte ich allerdings nur pass geschrieben, da Du ja wolltest, dass einfach weitergemacht wird.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mal so als kurzer Vorschlag, ohne Netz und doppelten Boden. :)

Code: Alles auswählen

import os

directory = "c:/mein Directory" 

for f in os.listdir(directory):
    os.remove(f)
os.rmdir(directory)
mazdafox
User
Beiträge: 13
Registriert: Mittwoch 20. Juni 2007, 08:32

ja nur das er mir bei der variante das tin_temp ordner nicht löscht sonder nur LOL ausgibt!!!! obwohl der order vorhanden ist

Code: Alles auswählen

try: 
  os.rmdir("C:\\tin_temp")
except:
  print ("LOL")
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Ich denke N317V hat das mit dem "nicht leeren" Ordner überlesen.
Weiß atm nicht ob es ne Möglichkeit gibt eine rmdir ähnliche Methode zu verwenden die force ein Verzeichnis löscht.
Also meine Lösung da oben sollte funktionieren.
Erst werden die Dateien im Ordner gelöscht dann der Ordner.
Es fehlen allerdings die try: except Blöcke, wenn dein Programm dir nicht die exceptions bei Fehlschlägen um die Ohren hauen soll.
BlackJack

Zum löschen von ganzen Verzeichnisbäumen gibt's `shutil.rmtree()`.
mazdafox
User
Beiträge: 13
Registriert: Mittwoch 20. Juni 2007, 08:32

danke leute habe schon eine neue möglichkeit gefunden und es funktioniert nun! hier mal mein fertiges programm kann man daran noch was verbessern??? fällt euch was auf?

mfg christoph

Code: Alles auswählen

# ---------------------------------------------------------------------------
# SDE_TIN_temp.py
# Created on: Mi Jun 13 2007 
#   (generated by Pueler Christoph)
# ---------------------------------------------------------------------------

# Import system modules
import sys, string, os, arcgisscripting, datetime

# Create the Geoprocessor object
gp = arcgisscripting.create()

print ("--------------------------- Opening Tool: 2D to 3D ---------------------------")
print ("")

now1 = datetime.datetime.now()

print "------------- Calculating started at: " , now1 , "------------"
print ("")

# Check out any necessary licenses
gp.CheckOutExtension("3D")

# Load required toolboxes...
gp.AddToolbox("C:/Programme/ArcGIS/ArcToolbox/Toolboxes/3D Analyst Tools.tbx")
gp.AddToolbox("C:/Programme/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")

# Local variables...
Delete_succeeded = "false"
TIN_Temp = "C:\\TIN_Temp"
TIN_Temp_2 = "C:\\TIN_Temp"
DHM_Point_fein1 = "Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Point_fein1"
DHM_Point_fein2 = "Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Point_fein2"
DHM_Point_grob = "Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Point_grob"
DHM_Polyline_richtig_Albania = "Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Polyline_richtig_Albania"
DHM_Polyline_richtig_Greece = "Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Polyline_richtig_Greece"
DHM_Route_Dissolve = "Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Route_Dissolve"
DHM_Route = "Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Route"
DHM_Terrain = "Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Terrain"

print ("-------------------------- Creating TIN local at C:\ -------------------------")

# Process: Create TIN...
try: 
  gp.Delete_management(TIN_Temp, "Tin")
except:
  pass
gp.CreateTin_3d(TIN_Temp, "PROJCS['WGS_1984_UTM_Zone_34N',GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],PARAMETER['False_Easting',500000.0],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',21.0],PARAMETER['Scale_Factor',0.9996],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Meter',1.0]]")

# Process: Edit TIN...
gp.EditTin_3d(TIN_Temp, "'Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Point_fein1' GRID_CODE <None> masspoints false;'Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Point_fein2' GRID_CODE <None> masspoints false;'Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Point_grob' B1 <None> masspoints false;'Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Polyline_richtig_Albania' ELEVATION <None> hardline true;'Database Connections\\TAP.sde\\DHM.Test_3D\\DHM.Polyline_richtig_Greece' ELEVATION <None> hardline true")

print ("                 !!!!! Saving TIN successfully finished !!!!!                 ")
print ("")
print ("-------------------------------- Merging Route -------------------------------")

# Process: Dissolve...
try: 
  gp.Delete_management(DHM_Route_Dissolve, "FeatureClass")
except:
  pass
gp.Dissolve_management(DHM_Route, DHM_Route_Dissolve, "", "", "MULTI_PART")

print ("               !!!!! Merging Route successfully finished !!!!!                ")
print ("")
print ("--------------------------- Interpolate_Shape_to_3D --------------------------")
print ("---------------------------- Getting Input Surface ---------------------------")
print ("------------------------- Getting Input Feature Class ------------------------")
print ("----------------------- Exporting Output Feature Class -----------------------")

# Process: Interpolate Shape...
try: 
  gp.Delete_management(DHM_Terrain, "FeatureClass")
except:
  pass
gp.InterpolateShape_3d(TIN_Temp_2, DHM_Route_Dissolve, DHM_Terrain, "", "1", "BILINEAR")

print ("           !!!!! Interpolate Shape to 3D successfully finished !!!!!          ")
print ("")
print ("------------------------ Deleting TIN from local disk ------------------------")

# Process: Delete...
gp.Delete_management(TIN_Temp_2, "Tin")

print ("                !!!!! Deleting TIN successfully finished !!!!!                ")
print ("")

now2 = datetime.datetime.now()

print "       !!! Tool: 2D to 3D successfully finished after",now2-now1,"!!!      "
print ("")
print ("")
print ("------------------------ !!! Press enter to close !!! ------------------------")

wait=raw_input()
BlackJack

``print`` ist keine Funktion, die Klammern um die "Argumente" sehen "komisch" aus.

Den "Quelltext" für die GIS-Anwendung hätte ich nicht auf eine Monsterzeile gepackt.

Und ein ``except:`` ohne eine konkrete Ausnahme sollte man nicht verwenden. Das verschluckt wirklich *alles* und erschwert damit die Fehlersuche ungemein.
mazdafox
User
Beiträge: 13
Registriert: Mittwoch 20. Juni 2007, 08:32

was soll ich statt print nehmen?
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Du sollst statt print ("blubb") print "blubb" schreiben :)
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

vorallem mehrzeilige Ausgaben sind in der Regel so besser:

Code: Alles auswählen

print """Angefangen mit 3 Anführungszeichen
und
abschließend mit 3 Anführungszeichen"""
mazdafox
User
Beiträge: 13
Registriert: Mittwoch 20. Juni 2007, 08:32

sind nicht mehrzeigig! möchte nur abstände daher das print ""
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

mazdafox hat geschrieben:sind nicht mehrzeigig! möchte nur abstände daher das print ""
Und wie mehrzeilig das ist:

Code: Alles auswählen

print "       !!! Tool: 2D to 3D successfully finished after",now2-now1,"!!!      " 
print ("") 
print ("") 
print ("------------------------ !!! Press enter to close !!! ------------------------") 
geht auch so:

Code: Alles auswählen

mein_text = """       !!! Tool: 2D to 3D successfully finished after %s!!!


------------------------!!! Press enter to close !!! ------------------------"""

print mein_text % str(now2-now1)
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Zap hat geschrieben:Ich denke N317V hat das mit dem "nicht leeren" Ordner überlesen.
Stimmt! Das hab ich nicht gelesen. Ich hatte mich ja schon auf einen viel früheren Beitrag bezogen. Sorry!
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Antworten