Seite 1 von 1

Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 07:35
von pynomos
Moin,

ich bin mit meinem (kleinen) Latein am Ende und finde den Fehler nicht, warum das Script in 2.7 läuft und in 3.2 nicht...

in der Zeile "33" mit n1 = string.count(rdir,os.sep) kommt die Meldung Objekt hätte Eigenschaft count nicht...??

Hat jemand eine Idee??

Code: Alles auswählen

# Pfade ersetzen #

import sys,os,string


def replace(rdir):
	for entry in os.listdir(os.curdir):
		if os.path.isdir(entry):						# directory; recursive call #
			os.chdir(entry)
			replace(os.pardir+os.sep+rdir)
			os.chdir(os.pardir)
		if os.path.isfile(entry):						# file; process it... #
			ext = os.path.splitext(entry)[1]
			if ext == '.htm' or ext == '.html':         # ...if HTML source #
				nm = entry + ".bak"
				if len(sys.argv) > 1:
					if sys.argv[1] == "-b":
						try:
							os.rename(entry,nm)			# backup file #
						except WindowsError:			# backup file already exists #
							pass
						fin = open(nm,'r')
					else:
						fin = open(entry,'r')
				else:
					fin = open(entry,'r')
				lines = fin.readlines()					# read file #
				fin.close()
				fout = open(entry,'w')
				for line in lines:
					c = os.getcwd().split(os.sep)		# construct absolute path #
					#print(rdir,os.sep)
					n1 = string.count(rdir,os.sep)
					n2 = len(c) - n1 + 1
					cdir = os.sep
					for i in range(n2,len(c)):
						cdir = os.path.join(cdir,c[i])
					cdir = os.path.join(cdir,entry)		# --> add file name <-- #
					line = string.replace(line,"$LOOK_UP$",rdir)
					line = string.replace(line,"$LOOK_HERE$",cdir)
					fout.write(line)
				fout.close()




if __name__ == '__main__':
        print("Start...")
        replace("")
        print("OK.\n")

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 07:55
von mutetella

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 07:56
von cofi
Das hat das Modul ja auch nicht: http://docs.python.org/py3k/library/string.html

Die Funktionen des Moduls, die auch als String/Unicode Methoden vorliegen, waren schon lange deprecated, benutz also die Methoden.

Genauso solltest du dir `with` anschauen.

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 08:33
von pynomos
schonmal dank für die Infos...

gibt es sowas wie
"hattesete das -> nimm nun dieses"?

... mit was ermittelt man den in 3.2 die Länge eines Strings?

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 08:34
von /me
pynomos hat geschrieben:... mit was ermittelt man den in 3.2 die Länge eines Strings?
So wie vorher auch. Mit len().

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 08:40
von cofi
pynomos hat geschrieben:gibt es sowas wie
"hattesete das -> nimm nun dieses"?
Für alles andere:

Code: Alles auswählen

string.foo(bar, baz)
=>

Code: Alles auswählen

bar.foo(baz)

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 08:43
von mutetella
pynomos hat geschrieben:gibt es sowas wie
"hattesete das -> nimm nun dieses"?
Schau' Dir mal das hier an. Ob es eine Übersicht, so wie Du Dir das vorstellst, gibt, glaube ich eher nicht...

Jedenfalls findest Du hier Python 3 string-Methoden. Auch die count-Funktion aus dem string-Modul wirst Du hier wieder finden.

mutetella

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 08:46
von pynomos
/me hat geschrieben:
pynomos hat geschrieben:... mit was ermittelt man den in 3.2 die Länge eines Strings?
So wie vorher auch. Mit len().
... quatsch - ich meinte wie oft ein Substring in einem String auftaucht...

@mutella: hää in 3.2 ist das count noch da??

irgendwie stehe ich aufm Schlauch

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 08:50
von mutetella
pynomos hat geschrieben:hää in 3.2 ist das count noch da??
Jepp. Allerdings nicht mehr als Funktion sondern als string-Methode.
Sagte das nicht cofi bereits...?

Lies Dir doch einfach mal die Links, die ich Dir geschickt haben. Danach bist Du schlauer...

mutetella

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 09:29
von Leonidas
Falls es noch nicht deutlich genug war: auch in Python 2 ist das ``string``-Modul deprecated und man soll die String-Methoden nutzen.

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 09:47
von pynomos
ahh... o.k.!!!

ich habs kapiert - Danke für die "Nach-Hilfe"

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 10:08
von mutetella
Das hier habe ich in dem Zusammenhang gerade gefunden. Auch die anderen Kapitel in dem Buch finde ich gut gemacht...

mutetella

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 10:14
von pynomos
Danke!

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 15:36
von derdon
Hier noch eine PDF als Übersicht: http://dl.dropbox.com/u/24756937/python2python3.pdf (keine Ahnung, wo ich die mal gefunden hab)

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 15:48
von cofi
Das ist sogar im PDF verlinkt: http://www.qtrac.eu/py3book.html

http://ptgmedia.pearsoncmg.com/imprint_ ... ython3.pdf

Fand ich auch sehr hilfreich.

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 15:54
von Xynon1
@derdon
Das ist wirklich mal schön kompakt :D

Allerdings muss da sowas "use True and False rather than 1 and 0" als Unterschied zwischen Python2.x und 3.1 aufgezählt werden? :|
Wer sucht findet noch mehr :)

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 15:58
von derdon
Ja, natürlich sollte man (wie bei allem) nicht einfach alles so ohne Skeptik und Zweifel übernehmen.

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 16:09
von Xynon1
Naja, es steht unter der Spalte Idoms, insofern soll es wohl eher darauf hinweisen das man auch gleich True schreiben kann, unabhängig von der Python Version - auch wenn das sehr merkwürdig eingeteilt ist. :roll:
Aber abgesehen davon, das mit dem "super"* will mir nicht in den Kopf sollte man das wirklich so nutzen - egal in welcher Python Version ?

*

Code: Alles auswählen

class B(A):
    def __init__(self):
        super().__init__()

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 16:23
von cofi
Ja: http://docs.python.org/py3k/library/fun ... html#super

Die Syntax in Python2 war etwas gewoehnungsbeduerftiger.

Re: Fehlermeldung bei count nach Umstellung auf Python 3.2

Verfasst: Donnerstag 19. Mai 2011, 16:33
von Xynon1
Ok, danke für den Hinweis.