Seite 1 von 1
print('File%d') % i zusammen mit fopen
Verfasst: Dienstag 4. März 2014, 22:48
von MoritzMoritz
Hallo an alle,
ich steige gerade von Matlab auf Python um (nicht aus Kostengünden) und schreibe ein simples Skript um csv Dateien in einem Verzeichniss auszulesen.
Ich möchte nicht die Variante
verwenden, da meine Dateien durchnummeriert sind und mir folgende Variante einfacher erscheint:
Code: Alles auswählen
while i in NumberOfRuns:
FileToOpen = print('Run%d.csv') %i
with open(FileToOpen) as f:
f_csv=csv.reader(f)
headers = next(f_csv)
for row in f_csv
#do something with row
allerdings bekomme ich einen Syntax fehler in der Zeile mit print. Print alleine funktioniert. Wie übergebe ich den Dateinamen als Argument an open() ?
LG
Moritz
Re: print('File%d') % i zusammen mit fopen
Verfasst: Dienstag 4. März 2014, 22:57
von Leonidas
Der %-Operator arbeitet auf String-Objekten, nicht auf dem Rückgabewert von ``print()``, daher:
Oder
Re: print('File%d') % i zusammen mit fopen
Verfasst: Dienstag 4. März 2014, 22:59
von diesch
print ist ein Ausdruck (Python2) bzw. eine Funktion (python3), mi5t der du etwas ausgeben kannst. Du kannst damit keine Stribngs formatieren o.ä. Lass dass
print einfach weg:
Deine Benennung der Variablen entspricht nicht den unter Python üblichen Konventionen. Schau dir mal
PEP 8 -- Style Guide for Python Code an, bevor du dir da einen schlechten Stil angewöhnst.
Re: print('File%d') % i zusammen mit fopen
Verfasst: Dienstag 4. März 2014, 23:30
von MoritzMoritz
Ok danke für die raschen! Antworten.
Das mit PEP 8 schaue ich mir an
Hier das vollständige Beispiel für alle Nachkommenden (achtung Anfänger am Werk):
Code: Alles auswählen
number_of_runs = range(number_of_files)
b=0
for i in number_of_runs
b+=1 # actually my files start with 1 and not 0
file_to_open = 'Run%d.csv' %b
with open(file_to_open) as f:
f_csv=csv.reader(f)
# headers = next(f_csv) # i don not have headers
for row in f_csv:
print(row) # or some other stuff
Re: print('File%d') % i zusammen mit fopen
Verfasst: Dienstag 4. März 2014, 23:35
von cofi
Statt `b` kannst du auch einfach `i + 1` benutzen, um die Dateinamen zu generieren.
Re: print('File%d') % i zusammen mit fopen
Verfasst: Dienstag 4. März 2014, 23:35
von MoritzMoritz
Der %-Operator arbeitet auf String-Objekten, nicht auf dem Rückgabewert von ``print()``, daher:
Code:
Was mir nicht ganz klar ist:
ergibt : Run20.csv
ergibt : Run20.csv
ist da ein Unterschied ?
Re: print('File%d') % i zusammen mit fopen
Verfasst: Dienstag 4. März 2014, 23:40
von MoritzMoritz
Danke jedenfalls. Das war gerade ein sehr erfreulicher Start mit Python
Re: print('File%d') % i zusammen mit fopen
Verfasst: Mittwoch 5. März 2014, 00:11
von cofi
In Python2 laeuft beides auf dasselbe hinaus, weil die Klammern ueberfluessig sind und keine Bedeutung haben. Sprich da steht nach dem Compiler tatsaechlich dasselbe.
In Python3 gibt die `print` Funktion (hier braucht man tatsaechlich die Klammern!) `None` zurueck und darum ergaebe `print('Run%d.csv') % 20` einen Typ-Fehler.
Re: print('File%d') % i zusammen mit fopen
Verfasst: Mittwoch 5. März 2014, 00:20
von Sirius3
MoritzMoritz: wenn Du von 1 ab zählst, dann kannst Du das auch ins Range schreiben:
wobei Du hier xrange nehmen solltest, da Du ja gar keine Liste brauchst.
Re: print('File%d') % i zusammen mit fopen
Verfasst: Mittwoch 5. März 2014, 09:24
von snafu
@Sirius3: Nur dass der Aufruf von `xrange()` hier wohl etwas schwierig wird, da offenbar Python 3 verwendet wird...

Re: print('File%d') % i zusammen mit fopen
Verfasst: Mittwoch 5. März 2014, 09:33
von BlackJack
@snafu: Nope, es wird Python 2 verwendet. Denn im ersten Beitrag steht, dass ``FileToOpen = print('Run%d.csv') %i`` zu einem SyntaxError führt, und das würde es in Python 3 nicht. Da würde es zur Laufzeit zu einem ``TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'`` kommen.