Frage zu os.write()

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
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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
heiliga horsd

Also write() in Dateien und os.write() "auf" Dateien - verstehe ich das richtig?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
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
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.
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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Wenn du hier eine Frage zu os.write() stellen musst brauchst du die Funktion nicht.
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!
Antworten