如何在Python中替换文件中的特定数字?

2024-09-27 09:32:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 文件closeinput数字opendatdieein
3条回答

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

您的代码有一点变化:

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

如果按照示例的建议,输入文件中每行只有一个数字,则只需将整行(去掉尾随换行符后)与搜索的数字进行匹配,如果匹配,则输出替换字符串而不是原始行

还请注意,最好不要直接写回输入文件,而是先写一个临时文件,然后将其重命名为输入文件,以最大限度地减少由于中断而在写回过程中丢失数据的可能性:

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

相关问题 更多 >

    热门问题