Python "touch"

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.
Antworten
Benutzeravatar
piton
User
Beiträge: 3
Registriert: Samstag 25. September 2010, 08:16

Hallo,

ich versuche das Kommando "touch" aus der Shell in Linux in Python zu verwenden:
In Bash:

Code: Alles auswählen

#!/bin/bash
a=0
while [ a -lt 10 ]
do
touch {a}.txt
((a=a+1))
done
Ich habe versucht das so zu lösen aber die Variable "i" wird nicht umgesetzt:

Code: Alles auswählen

#!/usr/local/bin/python3.1

i=0
while i < 10:
        open("i","w").close()
        i=i+1
Es wird nur ein file mit dem Name "i" generiert.
Danke
piton
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

über den Sinn und Zweck lässt sich streiten...

Statt while ist eine for-schleife angebrachter.

Es wird auch nur ein File generiert, weil das eine immer wieder geöffnet wird, du übergibst "open" einen String.

Code: Alles auswählen

>>> i = 2
>>> 'i'
'i'
>>> i
2
Btw. die while-Schleife im Bash-CMD würde ich nicht verwenden, eher eine for-Schleife {0..10}.
the more they change the more they stay the same
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Du musst die Datei dafür nicht öffnen und ein for-loop macht hier mehr Sinn.

Code: Alles auswählen

import os

for i in xrange(10):
    os.utime(str(i), None)
BlackJack

@DasIch: Das geht aber nur wenn die Dateien schon existieren. Sonst bekommt man einen 'OSError: [Errno 2] No such file or directory: '0''. ``touch`` legt Dateien ja auch an.
Benutzeravatar
piton
User
Beiträge: 3
Registriert: Samstag 25. September 2010, 08:16

Also, ich habe das jetzt hinbekommen:

Code: Alles auswählen

#!/usr/local/bin/python3.1

import os

for i in range(10):
    open(str(i),"w")
oder

Code: Alles auswählen

#!/usr/bin/python

import os

for i in xrange(10):
    open(str(i),"w")
es ist zu bemerken, daß unter python 3.1 xrange nicht akzeptiert wird. Die Meldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "script.py", line 5, in <module>
    for i in xrange(10):
NameError: name 'xrange' is not defined
erscheint.

EDIT: Wobei das modul "import os" gespart werden kann
piton
BlackJack

@piton: Du solltest die Dateien auch explizit schliessen, wie Du das in dem ersten Beitrag in diesem Thread ja auch schon gemacht hast.

Wenn wie im Bash-Skript auch eine Dateiendung in den Namen soll, solltest Du Dir mal die Möglichkeiten von Python Werte in Zeichenketten zu formatieren, anschauen. Und falls die Dateien bereits existieren sollten und nicht durch diese Aktion auf 0 Bytes reduziert werden dürfen, dann ist der Modus bei `open()` noch falsch.
Benutzeravatar
piton
User
Beiträge: 3
Registriert: Samstag 25. September 2010, 08:16

ich habe die Formatierung eines Strings angeschaut. Wenn ich dieselbe Dateien mit der Endung ".txt" erzeugen möchte, dann:

Code: Alles auswählen

#!/usr/local/bin/python3.1

for i in range(10):
    open("{0}.txt".format(i),"w").close()
piton
Antworten