Как заменить Python указанный c номер в файле? - PullRequest
0 голосов
/ 02 апреля 2020

У меня проблема в python ... Я хочу заменить число в файле, но не знаю как. Так, например, у меня есть эти числа в файле:

3
5
76
35
9

после того, как я попытался заменить 5 с 12 у меня будет этот файл

3
12
76
312
9

, но я хочу, чтобы каждая строка была номер сеперет, правильный файл должен выглядеть следующим образом

3
12
76
35
9

У меня, к сожалению, нет плана, как это сделать это. У кого-нибудь есть идея? Это мой код:

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()

Ответы [ 3 ]

1 голос
/ 02 апреля 2020

Небольшое изменение от вашего кода:

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 голос
/ 02 апреля 2020

Если в вашем входном файле только одно число на строку, как показано в вашем примере, вы можете просто сопоставить всю строку (после удаления завершающего символа новой строки) с искомым числом и вывести строку замены вместо исходная строка, если они совпадают.

Также обратите внимание, что лучше не записывать напрямую обратно во входной файл, а вместо этого записывать во временный файл, а затем переименовывать его во входной файл, чтобы минимизировать вероятность потери данных во время обратная запись из-за прерывания:

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')
0 голосов
/ 02 апреля 2020

Чтобы заменить 35 на 312, необходимо проверить, есть ли в строке нужная строка:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...