Seite 1 von 1

Python "touch"

Verfasst: Samstag 25. September 2010, 08:30
von piton
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

Re: Python "touch"

Verfasst: Samstag 25. September 2010, 08:49
von Dav1d
ü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}.

Re: Python "touch"

Verfasst: Samstag 25. September 2010, 08:57
von DasIch
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)

Re: Python "touch"

Verfasst: Samstag 25. September 2010, 09:03
von 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.

Re: Python "touch"

Verfasst: Samstag 25. September 2010, 09:34
von piton
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

Re: Python "touch"

Verfasst: Samstag 25. September 2010, 09:44
von 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.

Re: Python "touch"

Verfasst: Samstag 25. September 2010, 10:40
von piton
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()