[Python]Bombers Fragetread

BomberDeluxe schrieb:
Code:
def pic_rename(path,i=1,number=[]):
	a=0
	for move_file in number:
		shutil.move(move_file,path)
	number=[]
	for file_name in os.listdir(path):
		j=str(i)
		path_name = path + file_name
		if os.path.isfile(path_name):
			a=a+1
			if a > 100:
				number.append(path_name)
			else:
				os.rename(path_name, path +"pictureb "+ j + os.path.splitext(path_name)[1])
				i = i + 1
		elif os.path.isdir(path_name):
			print("Durchsuche Ordner " + file_name)
			print(number)
			i = pic_rename([B]path+file_name+"/"[/B],i,number)
		else: print (path_name+ " konnte nicht umbenannt werden")
	return i

Tut mir ganz leid, für die Leichenschändung. Aber ich sitz immer noch bisschen an dem Path Join problem. Und bekomm ich partout nicht hin, die fett gedruckte Zeile mit os.path.join zu machen...
Ich hab es so probiert:
Code:
path=os.path.join(path, file_name)
klappt nicht, dann hab ich so einen Pfad:
E:/Users/me/pictures\example1
Sprich, ich hab 2 verschiedene slashs.
Also gut, vlt hab ich das ja von anfang an falsch und Pfade sollten so geschrieben werden:
E:\Users\me\...
Aber das kann ich nicht als String speichern, wegen dem "\".
Außerdem setzt er mir bei os.path.join keinen slash hinter den letzten Ordner...

Ich komm damit nicht klar, kann mir jemand helfen...?
Und ja, Google hab ich benutzt.
 
BomberDeluxe schrieb:
dann hab ich so einen Pfad:
E:/Users/me/pictures\example1
Sprich, ich hab 2 verschiedene slashs.
Also gut, vlt hab ich das ja von anfang an falsch und Pfade sollten so geschrieben werden:
E:\Users\me\...
Aber das kann ich nicht als String speichern, wegen dem "\".
Du musst den Backslash "escapen" wie in

http://docs.python.org/2/reference/lexical_analysis.html#literals

beschrieben, also

E:\\Users\\me\\...

Oder per "Regular Expressions" (kurz RegEx) ersetzen wie in

http://docs.python.org/2/howto/regex.html#search-and-replace

gezeigt wird.


HTH

BigNum
 
Diesen Backslash-Scheiß würde ich mir gar nicht erst angewöhnen. Python selbst versteht forward slashes wunderbar, egal auf was für einer Platform du unterwegs bist.

Wenn du einen Pfad hast, der sowohl backslashes als auch forward slashes enthält, kannst du ihn mit os.path.normpath() normalisieren. Beschreibung der Funktion findest du im Global Module Index der Python Doku.
 
Code:
def pic_rename(path,i=1,number=[]):
	a=0
	for move_file in number:
		shutil.move(move_file,path)
	number=[]
	for file_name in os.listdir(path):
		j=str(i)
		path_name = os.path.join(path, file_name)
		if os.path.isfile(path_name):
			a=a+1
			if a > 15:
				number.append(path_name)
			else:
				os.rename(path_name, path +"pictured "+ j + os.path.splitext(path_name)[1])
				i = i + 1
		elif os.path.isdir(path_name):
			print("Durchsuche Ordner " + file_name)
			i = pic_rename(path_name,i,number)
		else: print (path_name+ " konnte nicht umbenannt werden")
	return

So siehts momentan aus. Aber irgendwie haut der mir nichts sinnvolles raus, d.h. ich bekomme immer die Fehlermeldung:
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
pic_rename(path,i=1,number=[])
File "<pyshell#82>", line 18, in pic_rename
i = pic_rename(path_name,i,number)
File "<pyshell#82>", line 15, in pic_rename
i = i + 1
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
 
Du sagst:
Code:
i = pic_rename(path_name,i,number)
Aber da die Funktion keinen Wert zurückgibt, wird i hier durch None ersetzt.
 
Alles klar, ich hab das i nach dem return am Ende vergessen...

Oh mann... Ich komm hier echt gar nicht mehr klar...

Aber ich hab immerhin einen Hauptfehler gefunden :)

E:\Users\me\Pictures\examples\1\1 (1).JPG
E:\Users\me\Pictures\examples\1pictured 1.JPG
Ich denke ihr seht das Problem. Ich habe diese 2 Zeilen:

Code:
				os.rename(path_name, [B]path[/B] +"BBB"+ j + os.path.splitext(path_name)[1])
				print (path +"BBB"+ j + os.path.splitext(path_name)[1])
Demzufolge fehlt hinter dem path, den ich damit bastle:
Code:
path=os.path.normpath(os.path.join(path, file_name))
ganz einfach ein weiterer BackSlash. Kommt ihr soweit mit?
Den könnte ich jetzt natürlich hinbasteln. Aber das endet ja wieder damit, dass ich meine Pfade fast selber baue... Gibt es denn da keine Möglichkeit, ohne den Slash selber reinzuschreiben, dass sehe dann ja so aus:
Code:
path=os.path.normpath(os.path.join(path, file_name)+)"/"
Das geht ja auch wieder nicht, weil Python mir nicht erlaubt den Backslash einzusetzen...
Ich bekomm hier ne Krise...
Ich hoffe ihr könnt mir irgendwie folgen :)
 
Zurück
Oben