Seite 1 von 1

Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:13
von heiliga horsd
Hi,

ich habe in einem Verzeichnis haufenweise Dateien, die ich gerne umbenennen möchte. Dabei sollen jedoch nur einige Dinge im Namen der Dateien verändert werden. Wenn ich meinen ansatz trocken durchlaufen lasse, sieht das auch ganz gut aus und jetzt möchte ich das Programm auf ein Verzeichnis loslassen, und als ich mir dann nochmals die Doku zu os.write() angesehen habe fiel mir folgendes auf:
Note

This function is intended for low-level I/O and must be applied to a file descriptor as returned by os.open() or pipe(). To write a “file object” returned by the built-in function open() or by popen() or fdopen(), or sys.stdout or sys.stderr, use its write() method.
Kann mir das eventuell jemand auf Deutsch kurz erklären, ich verstehe nämlich nicht was da genau gemeint ist bzgl. der Unterschiede der ganzen genannten Dinge :?:

Wann brauche ich write() und wann os.write()?


Lg HH

Re: Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:17
von sma
os.write ist eine betriebssystemnahe Funktion, die zusammen mit os.open (und anderen Funktionen aus dem os-Modul) funktioniert. Write ist eine Methode der Klasse file, die mit einem file-Objekt funktioniert, das von der Standardfunktion open() geliefert wurde.

Stefan

Re: Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:19
von heiliga horsd
Also write() in Dateien und os.write() "auf" Dateien - verstehe ich das richtig?

Re: Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:30
von sma
Nein. write ist eine Methode von file. Ein file-Objekt bekommst du, wenn du open() benutzt. os.write ist eine Funktion, deren erstes Argument ein so genannter file descriptor sein muss, den du bekommst, wenn du os.open() benutzt.

Stefan

Re: Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:35
von heiliga horsd

Code: Alles auswählen

x = os.listdir(os.getcwd())
So bekomme ich eine Liste mit den Dateinamen im Verzeichnis, in dem das Script liegt. Dann iteriere ich da drüber und verändere jeden String passend. Nun will ich da noch einbauen dass er den veränderten String speichert. Ich habe da weder open(), noch os.open() dabei (oder kommt das noch?). Muss ich jetzt zum schreiben des Strings in den Dateinamen write() oder os.write() hernehmen?

Lg heiliga horsd

Re: Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:36
von BlackJack
@heiliga horsd: Mit beiden schreibt man Daten *in* Dateien. Die Frage ist nur wie die Datei repräsentiert wird. Durch eine Zahl, die das Betriebssystem mit einer Datei in Verbindung bringt, oder durch ein abstrakteres `file`-Objekt. Wenn Du die Beschreibung bei `os.write()` nicht verstehst, dann wirst Du die Funktion mit ziemlicher Sicherheit nicht brauchen.

Re: Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:38
von BlackJack
@heiliga horsd: Du kannst keine Daten "in Dateinamen schreiben". Wenn Du Dateien umbenennen willst musst Du `os.rename()` verwenden. Sowohl `file.write()` als auch `os.write()` beziehen sich auf den Datei*inhalt*, nicht auf die Metainformation wie den Dateinamen.

Re: Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:39
von DasIch
Wenn du hier eine Frage zu os.write() stellen musst brauchst du die Funktion nicht.

Re: Frage zu os.write()

Verfasst: Donnerstag 13. Mai 2010, 17:45
von heiliga horsd
BlackJack hat geschrieben:@heiliga horsd: Du kannst keine Daten "in Dateinamen schreiben". Wenn Du Dateien umbenennen willst musst Du `os.rename()` verwenden. Sowohl `file.write()` als auch `os.write()` beziehen sich auf den Datei*inhalt*, nicht auf die Metainformation wie den Dateinamen.
Vielen Dank, das hab ich gesucht!