Mam problem w Pythonie ... Chcę zamienić liczbę w pliku, ale nie wiem jak. Na przykład mam te numery w pliku:

3
5
76
35
9

Po tym, jak próbowałem zamienić 5 na 12, będę miał ten plik

3
12
76
312
9

Ale chcę, aby każda linia była oddzielną liczbą, prawidłowy plik powinien wyglądać tak

3
12
76
35
9

Niestety nie mam planu, jak to zrobić. Czy ktoś ma pomysł? To jest mój kod:

def Wert_aendern():
   d = open("Datei.dat",'r')

   filedata = d.read()
   d.splitlines()
   d.close()
   a = input('Geben Sie bitte die zu ändernde Zahl ein')
   b = input('Geben Sie bitte die neue Zahl ein')
   newdata = filedata.replace(a, b)

   d = open("Datei.dat",'w')
   d.write(newdata)
   d.close()
0
lennard743 2 kwiecień 2020, 19:25

3 odpowiedzi

Najlepsza odpowiedź

Aby zamienić 35 na 312, musisz sprawdzić, czy wiersz ma żądany ciąg:

if a in line:

def Wert_aendern():
    with open("Datei.dat",'r') as f:
        filedata = f.read()

    a = str(input('Geben Sie bitte die zu ändernde Zahl ein'))
    b = str(input('Geben Sie bitte die neue Zahl ein'))

    file_values = filedata.split('\n')

    for idx, line in enumerate(file_values):
        if a in line:
           file_values[idx] = line.replace(a, b)

    with open("Datei.dat",'w') as f:
        f.write('\n'.join(file_values))
Wert_aendern()
0
Selim 2 kwiecień 2020, 17:11

Mała zmiana w stosunku do Twojego kodu:

def Wert_aendern():
    with open('/Users/binhna/Downloads/text.txt', 'r') as f:
        d = f.readlines()
        d = [i.strip() for i in d]
    print(d)
    a = input('Geben Sie bitte die zu ändernde Zahl ein')
    b = input('Geben Sie bitte die neue Zahl ein')
    for i, x in enumerate(d):
        if x == a:
            d[i] = b
    print(d)
    #write d back to file

enter image description here

1
Binh 2 kwiecień 2020, 16:41

Jeśli w twoim pliku wejściowym jest tylko jedna liczba na wiersz, jak sugeruje twój przykład, możesz po prostu dopasować całą linię (po usunięciu końcowego znaku nowej linii) do szukanej liczby i wypisać ciąg zastępujący zamiast oryginalnego wiersza jeśli pasują.

Zwróć również uwagę, że lepiej nie zapisywać bezpośrednio z powrotem do pliku wejściowego, ale zamiast tego zapisywać do pliku tymczasowego, a następnie zmienić jego nazwę na plik wejściowy, aby zminimalizować ryzyko utraty danych podczas zapisu z powodu przerwy:

import os

with open('Datei.dat') as file, open('output.tmp', 'w') as output:
    a = input('Geben Sie bitte die zu ändernde Zahl ein')
    b = input('Geben Sie bitte die neue Zahl ein')
    for line in file:
        output.write(b + '\n' if line.rstrip('\n') == a else line)
os.rename('output.tmp', 'Datei.dat')
1
blhsing 2 kwiecień 2020, 16:44