Forum: PC-Programmierung Python: Zeichen in Datei ersetzen


von Kongruo (Gast)


Lesenswert?

Hi,
ich würde gerne mit python Zeichen in einer Datei ersetzen. Hier mein 
Versuch:

from tempfile import mkstemp
from shutil import move
from os import fdopen, remove


with fdopen('out.txt','w') as new_file:
    with open('in.txt') as old_file:
        for line in old_file:
          newline = line.replace("a", "y")
          new_file.write(newline)

Leider bekomme ich immer die etwas kryptische Fehlermeldung:

Traceback (most recent call last):
  File "file.py", line 6, in <module>
    with fdopen('out.txt','w') as new_file:
TypeError: an integer is required

Wo soll da ein Integer benötigt werden? Ich versteh's nicht ;-)

von Simon K. (simon) Benutzerseite


Lesenswert?


von Florian F. (flof3000)


Lesenswert?

Was willst du auch mit fdopen, das nimmt ein bereits offenes 
Dateihandle.

Die Funktion die Du suchst und korrekt eine Zeile drunter verwendest 
heißt open()...

von Rolf M. (rmagnus)


Lesenswert?

Kongruo schrieb:
> Traceback (most recent call last):
>   File "file.py", line 6, in <module>
>     with fdopen('out.txt','w') as new_file:
> TypeError: an integer is required
>
> Wo soll da ein Integer benötigt werden? Ich versteh's nicht ;-)

nun, fdopen will als erstes Argument keinen String haben, sondern einen 
file-Deskriptor, was nunmal ein Integer ist.
Siehe https://linux.die.net/man/3/fdopen

von imonbln (Gast)


Lesenswert?

Vielleicht nimmst du auch das fileinput modul zum suchen und ersetzen
wie hier beschrieben für python3

https://stackoverflow.com/questions/17140886/
1
import fileinput
2
with fileinput.FileInput('in.txt', inplace=True,backup='.bak') as fin:
3
    for line in fin:
4
       print(line.replace('a','y', end='')

von Markus (Gast)


Lesenswert?

Simon K. schrieb:
> https://stackoverflow.com/questions/15039528/what-...

Kannst Du die dort gegebene Antwort auf deutsch wiedergeben?
Was sind die Vor- und Nachteile der drei Befehle und wann wird welcher 
eingesetzt?

von guest (Gast)


Lesenswert?

Markus schrieb:
> Kannst Du die dort gegebene Antwort auf deutsch wiedergeben?

Hier das wichtigste:

open() erstellt neue Dateiobjekte, os.open() erstellt 
OS-Level-Dateideskriptoren und os.fdopen() erstellt ein Dateiprojekt aus 
einem Dateideskriptor.

Ein Dateideskriptor ist eine Ganzzahl, die die offene Datei in einer 
Tabelle von offenen Dateien identifiziert, die vom OS für jeden Prozess 
gehalten werden.

Dateiobjekte sind Python-Klassen, die Dateideskriptoren verpacken, um 
das Arbeiten mit Dateien bequemer und weniger fehleranfälliger zu 
machen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.